2012-03-02 71 views
0

將如何通過我周圍1500文本文件的文件夾中循環,每個包含正則表達式解析/迭代

「完成率:119(isComplete:0)\ r \ n失敗率:158 HC: 119- 158-F「

並得到」119「」0「」158「」119-158-F「out? 最簡單的方法是什麼?的preg_match?

+0

是,['preg_match'(HTTP:/ /us3.php.net/manual/en/function.preg-match.php)是要走的路。還有其他問題嗎?如果您需要示例,鏈接的手冊頁應該可以幫到您。 – rdlowrey 2012-03-02 19:48:13

+0

我將如何瀏覽某個目錄中的每個文件? – jmoon 2012-03-02 19:48:58

回答

0

我會用glob到文本文件迭代中像下面的目錄,但也有像opendirreaddir其他選項...

$myDir = '/path/to/text/files'; 

foreach (glob("$myDir/*.txt") as $filename) { 
    $str = file_get_contents($myDir . '/' . $filename); 
    $pattern = '/^\s*Completion rate: (\d+) \(isComplete: (\d) \)\s*Failure rate: (\d+) HC: ([A-Z0-9\-]+)\s*$/'; 
    if (preg_match($pattern, $str, $match)) { 
    var_dump($match); 
    } 
} 
+0

由於同伴壓力,我添加了一個正則表達式。然而,根據文件中數據的格式是否發生變化,有多少種不同的編寫正則表達式的方法...... – rdlowrey 2012-03-02 19:57:34

1

使用preg_match_all()把每場比賽到一個數組。然後你可以打印數組或打亂它。

// Define regex 
$regex = '/[^0-9]*([0-9]+)[^0-9]*([0-9]+)[^0-9]*([0-9]+)[^0-9]*([0-9]+-[0-9]+-[A-Z]+)/s'; 

// Open the directory containing your 1500 files 
if ($handle = opendir('/path/folder')) { 

    // Loop over each file in the directory 
    while (false !== ($entry = readdir($handle))) { 

     // Open the file 
     $file = file_get_contents($entry); 

     // Use preg_match_all to store each value in an array 
     preg_match_all($regex, $file, $numbers); 

     $numbers = $numbers[0]; // yes you have to do this part 

     print_r($numbers); // Or implode instead 
     echo '<br />'; 

    } 

    closedir($handle); 
} 
+0

我無法看到'\ d +'將如何匹配所需的'119-158-F ' – rdlowrey 2012-03-02 20:04:36

+0

哎呀,沒有看到他想提取那一點點。以爲他只是想要每個數字。最好的方法是在我的腳本中使用Kisaro的正則表達式。 – Joey 2012-03-02 20:08:16

0

這工作對我來說很好用正則表達式在線測試儀:

preg_match_all('/[^0-9]*([0-9]+)[^0-9]*([0-9]+)[^0-9]*([0-9]+)[^0-9]*([0-9]+-[0-9]+-[A-Z]+)/s'); 

它會得到你:

Array 
(
[0] => Array 
    (
     [0] => Completion rate: 129 (isComplete: 0)\r\nFailure rate: 158 HC: 119-158-F 
    ) 

[1] => Array 
    (
     [0] => 129 
    ) 

[2] => Array 
    (
     [0] => 0 
    ) 

[3] => Array 
    (
     [0] => 158 
    ) 

[4] => Array 
    (
     [0] => 119-158-F 
    ) 

)