忽略正则表达式模式中的重复项

时间:2010-12-22 09:28:05

标签: php regex

我有一个正则表达式模式,用于搜索文本文件中的单词。我如何忽略重复?

例如,看看这段代码

$pattern = '/(lorem|ipsum|daboom|pahwal|ababaga)/i';
$num_found = preg_match_all( $pattern, $string, $matches );

echo "$num_found match(es) found!";
echo "Matched words: " . implode( ',', $matches[0] );

如果我在文章中有多个说 lorem ,输出将是这样的

5 matches found!
Matched words: daboom,lorem,lorem,lorem,lorem

我希望模式只能找到第一个匹配项,而忽略其余的,所以输出应该是:

2 matches found!
Matched words: daboom,lorem

1 个答案:

答案 0 :(得分:6)

$matches[0]上执行array_unique。如果您希望唯一字符不区分大小写,则可能是array_map strtolower

$pattern = '/(lorem|ipsum|daboom|pahwal|ababaga)/i';
preg_match_all( $pattern, $string, $matches );
$matches = $matches[0]?array_unique(array_map('strtolower', $matches[0])):array();

echo count($matches)." match(es) found!";
echo "Matched words: " . implode( ',', $matches );