2011-09-12 7 views
1

私はPHPでのping要求からの応答時間をgrepしようとしています。応答は次のようになります。PHP応答時間Pingの結果を検索

PING server.domain.com (XXX.XXX.XXX.XXX) 56(84) bytes of data. 
64 bytes from XXX.XXX.XXX.XXX: icmp_seq=1 ttl=58 time=2.33 ms 

--- server.domain.com ping statistics --- 
1 packets transmitted, 1 received, 0% packet loss, time 0ms 
rtt min/avg/max/mdev = 2.332/2.332/2.332/0.000 ms 

応答時間はXX.XXまたはxxx.xx.ことができたので、私は、値に2.33ミリ秒を抽出するために探しているが、time=文句を言わない仕事を検索することによって、部分文字列をやっていますその長さは可変です。

これを行う最善の方法は?

+0

私はあなたがそれを認識せずに頭に打ち込んだと思う:grep。 Regexesはあなたの友人です。 –

答えて

4

この正規表現は

/time\=([0-9]+\.[0-9]+) ms/ 

を仕事とあなたが正規表現を学ぶ必要がある2つの小数点以下の桁

/time\=([0-9]+\.[0-9]{2}) ms/ 

そして、いくつかのサンプルPHPコード

<?php 

$str = '64 bytes from XXX.XXX.XXX.XXX: icmp_seq=1 ttl=58 time=2.33 ms'; 

    // $result will contain the number of matches - in this case, 1 
$result = preg_match('/time\=([0-9]+\.[0-9]{2}) ms/', $str, $matches); 
    // You can call it like this as well, if you don't care about the number of matches 
preg_match('/time\=([0-9]+\.[0-9]{2}) ms/', $str, $matches); 

print_r($matches); 
echo $matches[1]; 

?> 
+0

ありがとう、あなたは素晴らしいです! – Justin

+1

小数点を含まない173 msにマッチする正規表現に問題がありました。ですから、私は 'preg_match( '/ time \ =([0-9 \。] +)ms /'、$ str、$ matches);を使用しています。 –

1

にそれをカットする必要があります - 彼らが作りますこのようなものはほとんどありません。

http://us.php.net/preg_match

http://us.php.net/manual/en/pcre.pattern.php

あなたが毛を分割したい場合、彼らはここで本当に必要ではないですけど。あなたの出力の2行目が常にあなたが望むものならば、その行を取り、http://us2.php.net/strrposを使って行の最後の等号の位置を見つけ、そこから行末までのすべてを取得し、最後の行をハックします3文字 "ms"。それはあなたの時間を残すはずです。