加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 00:15:54 所属栏目:大数据 来源:网络整理
导读:我试图了解Lua中string.find和string.match之间的区别.对我而言,似乎都在字符串中找到了一个模式.但有什么区别?我该如何使用?比方说,如果我有字符串“Disk Space:3000 kB”,我想从中提
我试图了解Lua中string.find和string.match之间的区别.对我而言,似乎都在字符串中找到了一个模式.但有什么区别?我该如何使用?比方说,如果我有字符串“Disk Space: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)

它返回

.*

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

解决方法

在您的情况下,您需要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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读