Эксклюзивный шаблон соответствия в Lua - PullRequest
2 голосов
/ 29 июня 2011

Из этой строки

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

Я хочу соответствовать только 2 в кадре.Как мне это сделать?

Ответы [ 4 ]

4 голосов
/ 29 июня 2011

Вот строка Lua pattern , которую нужно использовать:

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

Если вы используете это в функции, подобной string.match, то это будет захватывать номер кадра в виде строки:

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

framenumber будет иметь захваченный номер (снова в виде строки. Преобразовать его в число с помощью tonumber) или NIL, если он не был найден.

2 голосов
/ 29 июня 2011

Если кадр всегда находится в начале и всегда имеется одинаковое количество пробелов, вам на самом деле не нужны шаблоны. Простая строка.sub будет делать:

local str = "frame=    2 fps= not really important"
local frame = tonumber(str:sub(7,12))
1 голос
/ 29 июня 2011

Учитывая ваши комментарии, простой шаблон s:match("%d+") будет работать, но s:match("frame=%s*(%d+)"), вероятно, более устойчив в долгосрочной перспективе.

1 голос
/ 29 июня 2011

Как-то так должно работать.

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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...