4

好吧,我想我把事情复杂化了,现在我迷路了。基本上,我需要把它从 Perl 翻译成 Lua:

my $mem;
my $memfree;
open(FILE, 'proc/meminfo');
while (<FILE>)
{
    if (m/MemTotal/)
    {
        $mem = $_;
        $mem =~ s/.*:(.*)/$1/;
    }

}
close(FILE);

到目前为止,我已经写了这个:

for Line in io.lines("/proc/meminfo") do
    if Line:find("MemTotal") then
        Mem = Line
        Mem = string.gsub(Mem, ".*", ".*", 1)
    end
end

但这显然是错误的。我没有得到什么?我明白为什么它是错误的,它实际上在做什么以及为什么当我这样做时

print(Mem)

它返回

.*

但我不明白什么是正确的方法。正则表达式让我感到困惑!

4

2 回答 2

3

下面的代码解析该文件的内容并将其放在一个表中:

meminfo={}
for Line in io.lines("/proc/meminfo") do
    local k,v=Line:match("(.-): *(%d+)")
    if k~=nil and v~=nil then meminfo[k]=tonumber(v) end
end

然后你可以做

print(meminfo.MemTotal)
于 2010-07-15T12:03:29.780 回答
2

Lua 不使用正则表达式。请参阅《Lua 编程》第20.1节及以下内容,以了解模式匹配和替换在 Lua 中的工作原理以及它与正则表达式的不同之处。

在您的情况下,您将完整的字符串 ( .*) 替换为文字字符串- 您刚刚返回.*也就不足为奇了。.*

原来的正则表达式用冒号后面的部分替换了任何包含冒号 ( .*:(.*)) 的内容,因此 Lua 中的类似语句可能是

string.gsub(Mem, ".*:(.*)", "%1")
于 2010-07-15T10:34:10.243 回答