2016-08-18 9 views
1

PHPの文字列内に全単語が存在するかどうかを確認するにはどうすればよいですか?PHP単語全体が文字列内にある場合

if (preg_match($needle, $haystack)) 

別の方法:

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

これらのメソッドの両方がある程度機能しますが、$haystackだけ含まれている場合、これらの方法はまた、trueを返します私はStackOverflowの上ここではいくつかのanswereを見つけました問題となっている$needleの部分..

例えば

私は$haystackは単語「PartialWord」が含ましかし、私は$needleに等しい「部分」

を作るかどうかを確認しようとした場合
$needle = "Partial"; 
$haystack = "PartialWord-random)exampletextfoo-blabla"; 
if (preg_match($needle, $haystack)) 

それは$needleは「PartialWord」と同じでなければなりませんtrueを返すようにするために$needleが&「の一部」であるので、それはfalseを返すべきであるにもかかわらず、trueを返します。

提案がありますか?

+1

しかし、あなたのすばらしい*には「部分的」が含まれています(単語区切りを構成するもの、句読点や空白など)、次に針、そして次に、句読点、空白などのように)代わりに? (その場合は '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 

3

最も簡単な解決策は次のようになります。

\Wは、任意の非単語文字である
$words= preg_split("/\W/", $haystack); 
return in_array($needle, $words); 

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

はPCREのため escape sequencesでマニュアルを参照してください:

2

私は、最も簡単な解決策は、それは私の知る限り単語の定義を知っているようである各側の空間と$SearchWordを探しますするpreg_match

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

を使用することだと思います。
Partialwordにスペースがないので、あなたのケースではPartial of Partialwordと一致しません。

関連する問題