2

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

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()確信していますが、配列に対してそれを行う方法と、文字列を参照する方法がわかりません。正規表現はループ内に配置する必要があります。

4

4 に答える 4

3

これを試して:

foreach ($progress as $str) {
    if (preg_match_all('/\[download] (\d+\.\d)% of (\d+\.\d+\w)/', $str, $matches)) {
        var_dump($matches);
    }
}
于 2009-02-26T10:40:24.477 に答える
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);
于 2009-02-26T10:40:06.707 に答える
0

以下を使用することもできます。

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

おそらく正規表現よりも高速で、読みやすいです。

于 2012-10-16T15:42:20.370 に答える