2009-02-26 14 views
1

PHPでregexを使用してこの種の文字列からパーセンテージとファイルサイズを取得するにはどうすればよいですか?配列の正規表現ですか?

事は、私はそうのようにしますprint_r関数を使用して、この文字列を取得することです:

while(!feof($handle)) 
{ 
    $progress = fread($handle, 8192); 
    print_r($progress); 
} 

上記出力する。このような何か:

[download] 28.8% of 1.51M at 171.30k/s ETA 00:06 

を私がするpreg_matchのようなものを使用する必要があります確信していますしかし、配列のためにそれを行う方法と、文字列をどのように参照するかはわかりません。正規表現はループの内側に配置する必要があります。

ありがとうございました。

+0

phpについてはわかりませんが、array.joinに対する小規模な配列テストでは一般的に – annakata

+0

申し訳ありませんが、私は質問を編集しました。出力は、配列要素の形式で1つの文字列にすぎません。 – Abs

+0

100%と0%はどのように再現されますか? – Gumbo

答えて

3

これを試してみてください:

foreach ($progress as $str) { 
    if (preg_match_all('/\[download] (\d+\.\d)% of (\d+\.\d+\w)/', $str, $matches)) { 
     var_dump($matches); 
    } 
} 
1
$string = '[download] 28.8% of 1.51M at 171.30k/s ETA 00:06 
      [download] 41.8% of 1.51M at 178.19k/s ETA 00:05'; 

// $string = file_get_contents($file_path); 

$pattern = '/(?<percent>[0-9]{1,2}\.[0-9]{1,2})% of (?<filesize>.+) at/'; 
preg_match_all($pattern, $string, $matches); 

print_r($matches); 
+0

100%で何が起こるのですか? –

+0

良い質問、Nerdling。 – Gumbo

+0

(? \ d {1,3}(?:\。\ d {0,2})?)% – OIS

0

あなたはまた、単に使用することができます。

$parts = explode(' ', trim($progress)); 
$progressPercentage = floatval($parts[1]); 

それはおそらく正規表現よりも早く、かつ読みやすいです。