2009-02-26 8 views
1

Comment obtenir le pourcentage et la taille de fichier de ce type de chaîne en utilisant regex en PHP?Regex sur un tableau?

La chose est je reçois cette chaîne en utilisant la fonction print_r comme ceci:

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

Les sorties au-dessus de quelque chose comme ceci:

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

Je suis sûr que je dois utiliser quelque chose comme preg_match mais pas sûr de savoir comment le faire pour un tableau plus comment puis-je référencer la chaîne. L'expression régulière doit être placée dans la boucle.

Merci pour toute aide.

+0

pas sûr de php, mais en général pour un petit test de tableau contre array.join – annakata

+0

Désolé, j'ai édité ma question. La sortie est juste une chaîne sous la forme d'un élément de tableau. – Abs

+0

Comment sont représentées 100% et 0%? – Gumbo

Répondre

3

Essayez ceci:

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

Que se passe-t-il à 100%? –

+0

Bonne question, Nerdling. – Gumbo

+0

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

0

Vous pouvez aussi utiliser:

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

Il est probablement plus rapide qu'un regex, et plus facile à lire.

Questions connexes