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

Odd*_*ore 6 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);
Run Code Online (Sandbox Code Playgroud)

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

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

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

print(Mem)
Run Code Online (Sandbox Code Playgroud)

它返回

.*
Run Code Online (Sandbox Code Playgroud)

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

Joe*_*oey 4

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

\n\n

在您的情况下,您将完整的字符串 ( .*) 替换为文字字符串.*\xe2\x80\x93 ,因此您刚刚返回也就不足为奇了.*

\n\n

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

\n\n
string.gsub(Mem, ".*:(.*)", "%1")\n
Run Code Online (Sandbox Code Playgroud)\n

  • 捕获组 (`(.*)`) 是不必要的。`string.gsub(Mem, ".*:", "")` 就足够了。它会删除直到最后一个“:”的所有内容。 (4认同)