Lua 中的 string.find 和 string.match 有什么区别?

我想理解 Lua 中 string.find 和 string.match 的区别。对我来说,它们似乎都可以在字符串中查找模式。但是有什么区别?我该如何使用它们?比如说,如果我有字符串“磁盘空间:3000 kB”,我想从中提取出 '3000'。

编辑:好的,我觉得我把事情搞得太复杂了,现在我迷失了方向。基本上,我需要将这个从 Perl 转换成 Lua:

my $mem;
my $memfree;
open(FILE, 'proc/meminfo');
while (<FILE>)
{
    if (m/MemTotal/)
    {
        $mem = $_;
        $mem =~ s/.*:(.*)/$1/;
    }
    elseif (m/MemFree/)
    {
        $memfree = $_;
        $memfree =~ 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)

它会返回

.*

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

原文链接 https://stackoverflow.com/questions/3254097

点赞
stackoverflow用户388847
stackoverflow用户388847

在你的情况下,你需要用 string.match:

local space = tonumber(("Disk Space 3000 kB"):match("Disk Space ([%.,%d]+) kB"))

string.find 有些不同,在返回任何捕获前,它会返回找到的子字符串的开始和结束索引。当没有捕获存在时,string.match将返回匹配的整个字符串,而string.find只返回第二个返回值之后的任何内容。string.find还可以通过使用“plain”参数在不了解Lua模式的情况下搜索字符串。

当您想要匹配的捕获时,请使用string.match,当您想要子字符串的位置或想要位置和捕获时,请使用string.find。

2010-07-15 09:24:16