2016-08-18 16 views
1

我將如何去檢查一個字符串中是否存在整個單詞在php中?我在這裏發現了一些的answere在計算器上:PHP如果整個單詞在字符串內

if (preg_match($needle, $haystack)) 

另一種方式:

if (strpos($haystack, $needle) !== false) 

這兩種方法都工作到一定程度,但如果$haystack僅包括這些方法也將返回true的$needle部分,這是一個問題..

例如,如果我嘗試,以檢查是否$haystack包含單詞「PartialWord」,但我讓$needle等於「部分」

$needle = "Partial"; 
$haystack = "PartialWord-random)exampletextfoo-blabla"; 
if (preg_match($needle, $haystack)) 

因爲$needle等於「部分」 &爲它返回true $needle應該等於「PartialWord」它將返回即使它應該返回false真。

有什麼建議嗎?

+1

但是你的strign * does *包含「Partial」,你的意思是你想搜索的東西(構成一個詞的中斷,如標點符號,空格等),然後你的針,然後(構成一個詞的中斷,像標點符號,空格等),而不是? (在這種情況下,請再次查看'preg_match',但更改搜索表達式) –

+1

您確實在這裏鬆開了單詞的定義。 – apokryfos

回答

4
preg_match('/\b(express\w+)\b/', $needle, $haystack); // matches expression 
preg_match('/\b(\w*form\w*)\b/', $needle, $haystack); // matches perform, 
                // formation, unformatted 

其中:

\b is a word boundary 
\w+ is one or more "word" character* 
\w* is zero or more "word" characters 

參見手冊上escape sequences的PCRE。

3

最簡單的解決辦法是:

$words= preg_split("/\W/", $haystack); 
return in_array($needle, $words); 

\W是任何非單詞字符。

2

我認爲最簡單的解決方案是使用的preg_match

If (preg_match("/\s" . $SearchWord . "\s/", $haystack)){ 
     Echo "found"; 
}else{ 
     Echo "not found"; 
} 

它會尋找$SearchWord兩邊各有一個空間,這是因爲據我所知,這個詞的定義。
因此,在您的情況下,由於Partialword中沒有空格,因此無法匹配部分分詞。

相關問題