好吧,我觉得我过于复杂,现在我迷失了。基本上,我需要翻译这个,从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)
它返回
.*
但我不明白什么是正确的方法。正则表达式让我感到困惑!
答案 0 :(得分: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)
答案 1 :(得分:1)
Lua不使用正则表达式。请参阅Lua中的编程,20.1部分以及以下内容,以了解模式匹配和替换在Lua中的工作方式以及它与正则表达式的不同之处。
在您的情况下,您要用文字字符串.*
替换完整的字符串(.*
) - 您只需返回.*
就不足为奇了。
原始正则表达式替换冒号后部分包含冒号(.*:(.*)
)的任何内容,因此Lua中的类似语句可能是
string.gsub(Mem, ".*:(.*)", "%1")