Lua独家模式匹配

时间:2011-06-29 03:40:27

标签: lua

从这一行

frame=    2 fps=  0 q=3.0 size=      -0kB time=00:00:13.33 bitrate=  -0.0kbits/s dup=0 drop=92

我只想匹配框架中的'2'。我该如何做到这一点?

4 个答案:

答案 0 :(得分:4)

以下是要使用的Lua pattern字符串:

"frame%=[%s]+(%d+)"

如果你在string.match这样的函数中使用它,那么这会将帧编号捕获为字符串:

local framenumber = string.match(testString, "frame%=%s+(%d+)");

framenumber将拥有捕获的数字(再次,作为字符串。将其转换为tonumber的数字)或NIL(如果未找到)。

答案 1 :(得分:2)

如果帧始终位于开头且总是有相同数量的空格,则实际上并不需要模式。一个简单的string.sub将执行:

local str = "frame=    2 fps= not really important"
local frame = tonumber(str:sub(7,12))

答案 2 :(得分:1)

这样的事情应该有效。

local data = 'frame=    2 fps=  0 q=3.0 size=      -0kB time=00:00:13.33 bitrate=  -0.0kbits/s dup=0 drop=92'
local _,_, frame = data:find("^frame%=%s+(%d+)")

if frame then
    print("Frame: "..frame)
end 

答案 3 :(得分:1)

鉴于您的评论,简单模式s:match("%d+")将起作用,但从长远来看,s:match("frame=%s*(%d+)")可能更强大。