1

我有一个使用制表符、换行符和空格的多行文件。在 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) 的最后一个元素,而不管它之前的任何空格。任何帮助将不胜感激,谢谢。

4

3 回答 3

1

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

于 2013-05-25T09:01:52.587 回答
0

问题是它成功匹配 $array (test3) 的最后一个元素,而不管它之前的任何空格。

根据您在上面加粗的观察,我会说只有在从行首开始之前没有空格的情况下您才想要匹配,所以让我们添加一个字符来表示^

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

这里有一个Rubular 来证明它

于 2013-05-25T08:12:13.300 回答
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);
}

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

于 2013-05-25T08:47:28.987 回答