2009-02-26 2 views
1

PHP에서 regex를 사용하여이 종류의 문자열에서 백분율 및 파일 크기를 얻으려면 어떻게해야합니까? 내가는 preg_match 같은 것을 사용할 필요가 확신배열의 정규식?

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

이 같은

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

위의 출력 뭔가를 :

는 것은 그래서 같이 인 print_r 함수를 사용하여이 문자열을 얻을 수있다 하지만 배열을 위해 그것을 수행하는 방법을 더한 것은 아니고 문자열을 어떻게 참조해야하는지 잘 모르겠습니다. 정규식은 루프 내부에 배치해야합니다.

도움 주셔서 감사합니다.

+0

PHP에 대해 잘 모르겠지만 array.join에 대한 작은 배열 테스트에 일반적으로 – annakata

+0

죄송합니다. 내 질문을 편집했습니다. 출력은 배열 요소 형식의 단 하나의 문자열입니다. – Abs

+0

100 %와 0 %는 어떻게 represended입니까? – 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]); 

그것은 정규식보다 아마 더 빨리, 그리고 쉽게 읽을.