將如何通過我周圍1500文本文件的文件夾中循環,每個包含正則表達式解析/迭代
「完成率:119(isComplete:0)\ r \ n失敗率:158 HC: 119- 158-F「
並得到」119「」0「」158「」119-158-F「out? 最簡單的方法是什麼?的preg_match?
將如何通過我周圍1500文本文件的文件夾中循環,每個包含正則表達式解析/迭代
「完成率:119(isComplete:0)\ r \ n失敗率:158 HC: 119- 158-F「
並得到」119「」0「」158「」119-158-F「out? 最簡單的方法是什麼?的preg_match?
我會用glob
到文本文件迭代中像下面的目錄,但也有像opendir
和readdir
其他選項...
$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);
}
}
由於同伴壓力,我添加了一個正則表達式。然而,根據文件中數據的格式是否發生變化,有多少種不同的編寫正則表達式的方法...... – rdlowrey 2012-03-02 19:57:34
使用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);
}
這工作對我來說很好用正則表達式在線測試儀:
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
)
)
是,['preg_match'(HTTP:/ /us3.php.net/manual/en/function.preg-match.php)是要走的路。還有其他問題嗎?如果您需要示例,鏈接的手冊頁應該可以幫到您。 – rdlowrey 2012-03-02 19:48:13
我將如何瀏覽某個目錄中的每個文件? – jmoon 2012-03-02 19:48:58