Regex - Как я могу получить это значение из строки текстового файла? - PullRequest
2 голосов
/ 24 декабря 2010

Я так плохо разбираюсь в preg_match, который, я думаю, является функцией, необходимой здесь. Я пытаюсь получить значение времени (я думаю, всегда 3 десятичных знака) из этой строки в текстовом файле: -

frame=    42 q= 38.0 f_size=    909 s_size=        1kB time= 1.400 br=   218.2kbits/s avg_br=     5.2kbits/s type= I

Итак, в этом примере я хочу получить 1.400. Любое руководство высоко ценится, я нахожу регулярное выражение действительно, действительно сбивает с толку.

Ответы [ 4 ]

6 голосов
/ 24 декабря 2010

Или, чтобы получить все значения сразу:

preg_match_all("/(\w+)=\s*(\d[\d.]*)/", $str, $uu);
$values = array_combine($uu[1], $uu[2]);

даст вам:

Array
(
  [frame] => 42
  [q] => 38.0
  [f_size] => 909
  [s_size] => 1
  [time] => 1.400
  [br] => 218.2
  [avg_br] => 5.2
)
2 голосов
/ 24 декабря 2010

использование time=[^\d]*([\d]+\.[\d]+|[\d]+):

$string1 = "frame=    42 q= 38.0 f_size=    909 s_size=        1kB time= 1.400 br=   218.2kbits/s avg_br=     5.2kbits/s type= ";
$string2 = "frame=    42 q= 38.0 f_size=    909 s_size=        1kB time= 400 br=   218.2kbits/s avg_br=     5.2kbits/s type= ";

preg_match('#time=[^\d]*([\d]+\.[\d]+|[\d]+)#',$string1,$matches1);
preg_match('#time=[^\d]*([\d]+\.[\d]+|[\d]+)#',$string2,$matches2);

print $matches1[1]; // prints 1.400
print $matches2[1]; // prints 400
2 голосов
/ 24 декабря 2010
if(preg_match('/time\s*=\s*(\d+\.\d{3})/',$str,$matches)) {
   $time = $matches[1];
}

Просто если вы не уверены в количестве десятичных цифр или в существовании десятичной точки, которое вы можете сделать:

if(preg_match('/time\s*=\s*(\d+\.?\d+)/',$str,$matches)) {
   $time = $matches[1];
}

Смотри

1 голос
/ 24 декабря 2010
$match = preg_match('/time=\\s*(\\d+(\\.\\d+)?)/', $row, $matches);

$time = $matches[1];

То, что это делает, соответствует:

  • буквенная строка time=
  • с последующим нулем или несколькими пробелами (\s*)
  • , за которым следуют одна или несколько цифр (\d+)
  • с последующим (необязательно) : точкой, затем одной или несколькими цифрами ((\.\d+)?)

Так что на самом деле он немного слабее, чем цифра-цифра-точка-три: он будет сопоставлять любое целое число или число с плавающей запятой с любым количеством десятичных цифр.

...