使用.gsub()在Lua中使用正则表达式

时间:2010-07-15 10:27:13

标签: regex string lua gsub

好吧,我觉得我过于复杂,现在我迷失了。基本上,我需要翻译这个,从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)

它返回

.*

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

2 个答案:

答案 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")