2011-01-06 138 views
0

我使用簡單的preg_match_all來查找文本中單詞列表的出現。如何匹配完整的單詞?

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

但是,這也匹配abcword123等詞的子集。我需要它找到word1,word2word3,當它們僅作爲完整單詞出現時。請注意,這並不總是意味着它們在兩側用空格分隔,它可以是逗號,分號,句點,感嘆號,問號或其他標點符號。

回答

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

嘗試:

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

您可以使用\b匹配單詞邊界。所以你想用/\b(word1|word2|word3)\b/作爲你的正則表達式。