我使用简单的preg_match_all
来查找文本中单词列表的出现。
$pattern = '/(word1|word2|word3)/';
$num_found = preg_match_all( $pattern, $string, $matches );
但这也匹配像abcword123
这样的单词子集。我需要它来查找word1
,word2
和word3
,当它们仅作为完整单词出现时。请注意,这并不总是意味着它们被两边的空格分开,可以是逗号,分号,句号,感叹号,问号或其他标点符号。
答案 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/
作为正则表达式。