2009-02-26 18 views
1

PHP'deki regex'i kullanarak bu tür dizelerden yüzde ve dosya sayısını nasıl alırım? Ben preg_match'in gibi bir şey kullanmak zorunda eminimBir dizi üzerinde regex?

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

: Böyle

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

yukarıdaki çıkışlar şey:

şey şöyle print_r işlevini kullanarak bu dizeyi almak edilir ancak bir dizi için nasıl yapılacağından emin değilsiniz ve nasıl dizime başvururum. Regexin döngü içine yerleştirilmesi gerekir.

Yardımlarınız için teşekkür ederiz.

+0

php hakkında emin değilim, fakat genel olarak array.join – annakata

+0

aleyhine küçük bir dizi testi için üzgünüm Soruyu düzenledim. Çıktı, bir dizi elemanı biçiminde sadece bir dizedir. – Abs

+0

% 100 ve% 0 nasıl temsil edilir? – Gumbo

cevap

3

bu deneyin:

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'de ne olur? –

+0

İyi soru, Nerdling. – Gumbo

+0

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

0

Ayrıca sadece kullanabilirsiniz:

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

Bir regex daha muhtemelen daha hızlı ve daha kolay okunur.