我有一个使用制表符,换行符和空格的多行文件。在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)的最后一个元素,而不管它之前是否有任何空格。任何帮助将不胜感激,谢谢。
答案 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);
}
这应该匹配你需要的一切。但它有一个小问题,如果你在文件中的最后一个关键字后添加换行符或空格,就可以解决这个问题。