簡體   English   中英

使用.gsub()的Lua中的正則表達式

[英]Regular expressions in Lua using .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)

它返回

.*

但我不知道什么是正確的方法。 正則表達式使我感到困惑!

下面的代碼解析該文件的內容並將其放在表中:

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)

Lua不使用正則表達式。 請參閱《在Lua中編程》第20.1節及以下部分,以了解模式匹配和替換在Lua中的工作方式以及與正則表達式的區別。

在你的情況,你要替換的完整的字符串( .*由文本字符串) .* -這是毫不奇怪,你剛開.*返回。

原始正則表達式用冒號后面的部分替換了包含冒號( .*:(.*) )的所有內容,因此Lua中的類似語句可能是

string.gsub(Mem, ".*:(.*)", "%1")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM