PHP正则表达式匹配所有行

时间:2013-05-25 08:07:38

标签: php regex

我有一个使用制表符,换行符和空格的多行文件。在PHP中,我试图遍历搜索特定关键字数组的文件。

这是数组: array('test', 'test2', 'test3')

文件内容:

@test
    @test3


       @test2


代码:

$file = file_get_contents('file.txt');
foreach ($array as $k) {
    preg_match('/(@'.$k.')$/m', $file, $m);
}
print_r($m);

问题是它成功匹配$array(test3)的最后一个元素,而不管它之前是否有任何空格。任何帮助将不胜感激,谢谢。

3 个答案:

答案 0 :(得分:1)

代码中的问题是print_r($m)不在循环中。显然,你只会打印最后一场比赛。

答案 1 :(得分:0)

  

问题是它成功匹配$ array(test3)的最后一个元素,无论它前面有任何空格。

根据你的观察结果,加粗,我会说你想要匹配 如果从行首开始没有空格,那么让我们添加一个要说的是^

preg_match('/^(@'.$k.')$/m', $file, $m);

这是一个Rubular to prove it

答案 2 :(得分:0)

$file = file_get_contents('file.txt');
$array = array('test', 'test2', 'test3');
$words = implode('|', $array);

if(preg_match_all('/@('.$words.')\s/i', $file, $m))
{
    print_r($m);
}

这应该匹配你需要的一切。但它有一个小问题,如果你在文件中的最后一个关键字后添加换行符或空格,就可以解决这个问题。