如何匹配完整的单词?

时间:2011-01-06 04:34:50

标签: php regex search

我使用简单的preg_match_all来查找文本中单词列表的出现。

$pattern = '/(word1|word2|word3)/';
$num_found = preg_match_all( $pattern, $string, $matches );

但这也匹配像abcword123这样的单词子集。我需要它来查找word1word2word3,当它们仅作为完整单词出现时。请注意,这并不总是意味着它们被两边的空格分开,可以是逗号,分号,句号,感叹号,问号或其他标点符号。

3 个答案:

答案 0 :(得分:3)

如果您希望匹配“word1”,“word2”,“word3”等,那么使用in_array总是更好。正则表达式是超级强大的,但它也需要很多CPU功率。因此,尽量避免使用

$words = array ("word1", "word2", "word3" );
$found = in_array ($string, $words);

检查PHP: in_array - Manual以获取有关in_array

的更多信息

如果您只想使用正则表达式,请尝试

$pattern = '/^(word1|word2|word3)$/';
$num_found = preg_match_all( $pattern, $string, $matches );

如果您想获得"this statement has word1 in it"之类的内容,请使用"\b"之类的

$pattern = '/\b(word1|word2|word3)\b/';
$num_found = preg_match_all( $pattern, $string, $matches );

此处更多信息PHP: Escape sequences - Manual搜索\b

答案 1 :(得分:1)

尝试:

$pattern = '/\b(word1|word2|word3)\b/';
$num_found = preg_match_all( $pattern, $string, $matches );

答案 2 :(得分:1)

您可以使用\b来匹配字边界。因此,您希望使用/\b(word1|word2|word3)\b/作为正则表达式。