Помогите с регуляркой

Статус
В этой теме нельзя размещать новые ответы.

Smile

Старатель
Регистрация
12 Ноя 2006
Сообщения
157
Реакции
11
Привет всем, помогите правильно написать регулярку.....

есть много повторяющих строк:

frame= 726 fps=207 q=25.0 size= 4183kB time=28.44 bitrate=1205.0kbits/s
frame= 819 fps=204 q=25.0 size= 4785kB time=32.16 bitrate=1218.9kbits/s
frame= 912 fps=202 q=25.0 size= 5344kB time=35.88 bitrate=1220.0kbits/s

из этих строк нужно вытащить время из последней строки, для этого использую след. регулярку...

preg_match("/(frame=([^=]*) fps=[^=]* q=[^=]* L)?size=[^=]*kB time=([^=]*) bitrate=[^=]*kbits\/s[^=]*$/",$file,$out);

всё работает отлично, но иногда строки немного меняются в след. чего выше написанное выражение не работает....

изменившийся текст имеет след. вид:

frame= 1429 fps=118 q=20.0 size= 8555kB time=56.56 bitrate=1239.1kbits/s dup=0 drop=284
frame= 1493 fps=119 q=21.0 size= 8782kB time=59.12 bitrate=1216.9kbits/s dup=0 drop=296
frame= 1547 fps=118 q=20.0 size= 9017kB time=61.28 bitrate=1205.5kbits/s dup=0 drop=307

т.е. в конце добавляется dup=0 drop=307. Как сделать правильную регулярку чтоб работала и в тексте что с верху и в тексте что с низу? хелп
 
я бы упростил регулярку.
пробуй так:
Код:
preg_match("/time=([\d\.]*).*$/",$file,$out);
 
Такая регулярка у меня работает:
Код:
frame=\s*\d+\s+fps=\s*\d+\s+q=\s*[\d\.]+\s+size=\s*\d+kB\s+time=\s*([\d\.]+)\s+bitrate=\s*[\d\.]+kbits/s\s+(?:dup=\s*\d+\s+drop=\s*\d+|)

Но вообще не понятно зачем в неё добавлять что-то, что идёт после искомого, т.е. более логично было бы использовать такую:
Код:
frame=\s*\d+\s+fps=\s*\d+\s+q=\s*[\d\.]+\s+size=\s*\d+kB\s+time=\s*([\d\.])
 
я бы упростил регулярку.
пробуй так:
Код:
preg_match("/time=([\d\.]*).*$/",$file,$out);


берет time только из 1 строки... а нужно из последней... :( можно както запустить по циклу, или даже не знаю как это сделать... чтоб выводило последний найденный тайм...?

Добавлено через 7 минут
Такая регулярка у меня работает:
Код:
frame=\s*\d+\s+fps=\s*\d+\s+q=\s*[\d\.]+\s+size=\s*\d+kB\s+time=\s*([\d\.]+)\s+bitrate=\s*[\d\.]+kbits/s\s+(?:dup=\s*\d+\s+drop=\s*\d+|)
Но вообще не понятно зачем в неё добавлять что-то, что идёт после искомого, т.е. более логично было бы использовать такую:
Код:
frame=\s*\d+\s+fps=\s*\d+\s+q=\s*[\d\.]+\s+size=\s*\d+kB\s+time=\s*([\d\.])

первая регулярка не работает, а вторая берет также только первый найденный time... а нужно последний...
 
а так?
Код:
preg_match("/^.*time=([\d\.]*).*$/s",$file,$out);
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху