php regex从文件名中提取电话号码

时间:2016-07-07 16:18:46

标签: php regex preg-match-all

我试图在阵列中添加带有电话号码的文件名。 我的测试文件是:

dsfdsf543-6786sdfsdfd.jpg
543-6786sdfsdfd.jpg
435-3454
dsfdsf543-6786.jpg
123-4567
543-6786.jpg
345-3454

我的目标是不同的电话号码将在阵列中具有单独的元素行。阵列行中的每个元素都具有相同的电话号码。 例如:

543-6786 dsfdsf543-6786sdfsdfd.jpg 543-6786sdfsdfd.jpg dsfdsf543-6786.jpg 543-6786.jpg
435-3454
123-4567
345-3454

我的代码:

$directory = $_SERVER['DOCUMENT_ROOT'];
$handler = opendir($directory);
while ($file = readdir($handler)) {


    if ($file != "." && $file != "..") {
      $regex = "/[\D]*[0-9]{3}-[0-9]{4}[\D]*/";
               preg_match_all($regex, $file, $results);

   }
}
print_r ($results);

结果是

Array ( [0] => Array ( [0] => 345-3454 ) )

为什么数组中只有一个文件名? 我的错误在哪里? 提前谢谢!

1 个答案:

答案 0 :(得分:3)

您一次将文件名提供给preg_match_all,每次$result被覆盖。问题是每次都将$results[0]推送到一个数组上,然后转储该数组。

$final_results = [];
while ($file = readdir($handler)) {
    if ($file != "." && $file != "..") {
        $regex = "/[\D]*[0-9]{3}-[0-9]{4}[\D]*/";
        if (preg_match_all($regex, $file, $results) > 0)
            $final_results[] = $results[0] ;
    }
}
print_r ($final_results);

每条评论更新:此版本创建一个key =>值数组,其中电话号码是键,值是包含该号码的所有文件名。

$final_results = [];
while ($file = readdir($handler)) {
    if ($file != "." && $file != "..") {
        $regex = "/[\D]*[0-9]{3}-[0-9]{4}[\D]*/";
        if (preg_match_all($regex, $file, $results) > 0) {
            if empty ($final_results[$results[0]]) {
                $final_results[$results[0]] = $file ;
            } else {
                $final_results[results[0]] .= " ".$file ;
            }
        }
    }
}
print_r ($final_results);

一旦你有了这个数组,就可以很容易地将它展平成一个你想要的一维数组。