preg_match вопрос, как это сделать? - PullRequest
0 голосов
/ 26 сентября 2011

Скажите, что у меня есть следующее:

$var = "127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=57 time=19.5 ms --- 127.0.0.1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 19.548/19.548/19.548/0.000 ms ";

Как я могу вернуться, так что просто говорит:

$var2 = "19.5";

Так что в основном это захватывает, что в этой части: time=19.5 ms ---

Спасибо

РЕДАКТИРОВАТЬ

Я думаю, что я понял это сам:

$var = "127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=57 time=19.5 ms --- 127.0.0.1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 19.548/19.548/19.548/0.000 ms";

$var2 = preg_match("/time=(.*) ms ---/", $var, $matches);
print_r($matches[1]);

Я не знаю, если этоправильный способ сделать это, но, кажется, работает?

Ответы [ 6 ]

4 голосов
/ 26 сентября 2011

Попробуйте:

$var = "127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=57 time=19.5 ms --- 127.0.0.1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 19.548/19.548/19.548/0.000 ms ";
if(preg_match('/time=(\d+\.\d+)/', $var, $match)) {
  $var2 = $match[1];
  echo $var2;
}

, который будет отображаться:

19.5

$match[1] будет содержать все совпадение (time=19.5), в вашем случае, и $match[1]содержит группу совпадений 1 из шаблона: это число 19.5.

1 голос
/ 26 сентября 2011

Вы можете получить это по следующей схеме:

preg_match('/time=([^ ]+) /',$matches);
echo $matches[1]; // 19.5

Соответствует после time= хотя бы одного символа (+), который не является пробелом ([^ ]).

1 голос
/ 26 сентября 2011

Это может сделать это с preg_match:

if (preg_match("/time=(.*?) ms/", $line, $m)) {
  $time = (float) $m[1];
}

Или с explode:

$fields = explode("=", $line);
$time = (float) $fields[4];
1 голос
/ 26 сентября 2011

preg_match("/time=([\d.]+).ms/",$var,$matches);
//var_dump($matches)
//$match[1] now holds the 19.5
?>

Наслаждайтесь

0 голосов
/ 26 сентября 2011
<?php

$var="127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=57 time=19.5 ms --- 127.0.0.1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 19.548/19.548/19.548/0.000 ms ";

preg_match("/time=([0-9.]+)/", $var, $matches);

$var2 = $matches[1];

echo $var2;

?>

Редактировать: Или вы можете редактировать регулярное выражение:

preg_match("/time\s*=\s*([0-9.]+)/", $var, $matches);

Так что это соответствует "time = xx.x" или "time = xx.x".

0 голосов
/ 26 сентября 2011

Используйте это регулярное выражение в вашем preg_match вызове

time=([\d\.]+)
...