例如存在的話,如果我的一句話是$sent = 'how are you';
如果我使用strstr($sent, $key)
搜索$key = 'ho'
它將返回true
因爲我的一句話中有ho
。如何檢查是否在一個句子
我正在尋找的是一種返回true的方法,如果我只搜索how,你或你。我怎樣才能做到這一點?
例如存在的話,如果我的一句話是$sent = 'how are you';
如果我使用strstr($sent, $key)
搜索$key = 'ho'
它將返回true
因爲我的一句話中有ho
。如何檢查是否在一個句子
我正在尋找的是一種返回true的方法,如果我只搜索how,你或你。我怎樣才能做到這一點?
如果您想爲您在同一個字符串多個單詞,你正在處理大的字符串,那麼這是更快:
$text = explode(' ',$text);
$text = array_flip($text);
然後你可以檢查的話與:
if (isset($text[$word])) doSomething();
這種方法閃電般快。
但爲了檢查短字符串中的幾個單詞,然後使用preg_match。
UPDATE:
如果你確實要使用此,我建議你實現它像這樣以避免出現問題:
$text = preg_replace('/[^a-z\s]/', '', strtolower($text));
$text = preg_split('/\s+/', $text, NULL, PREG_SPLIT_NO_EMPTY);
$text = array_flip($text);
$word = strtolower($word);
if (isset($text[$word])) doSomething();
然後雙擊空格,換行,標點符號和首都贏得了」不會產生錯誤的否定。
這種方法在檢查大字符串(即文本的整個文檔)中的多個單詞時速度要快得多,但如果您只想查找單個單詞是否存在正常大小,則使用preg_match會更有效串。
您可以使用使用功能preg-match
一個regex with word boundaries:
if(preg_match('/\byou\b/', $input)) {
echo $input.' has the word you';
}
@ codaddict的答案是技術上是正確的,但如果你正在尋找由用戶提供的話,你需要轉義特殊的任何字符正則表達式在搜索詞中的含義。例如:
$searchWord = $_GET['search'];
$searchWord = preg_quote($searchWord);
if (preg_match("/\b$searchWord\b", $input) {
echo "$input has the word $searchWord";
}
雅,搜索到的單詞由用戶提供。感謝您的洞察力。 – Tafu
**如果**缺少關閉括號。 –
你可以做的一件事是把你的句子按空格分解成一個數組。
首先,您需要刪除任何不需要的標點符號。 下面的代碼刪除任何不是字母,數字,或空間:
$sent = preg_replace("/[^a-zA-Z 0-9]+/", " ", $sent);
現在,所有你是的話,用空格隔開。要創建一個按空間分割的陣列...
$sent_split = explode(" ", $sent);
最後,您可以執行檢查。以下是所有步驟的組合。
// The information you give
$sent = 'how are you';
$key = 'ho';
// Isolate only words and spaces
$sent = preg_replace("/[^a-zA-Z 0-9]+/", " ", $sent);
$sent_split = explode(" ", $sent);
// Do the check
if (in_array($key, $sent))
{
echo "Word found";
}
else
{
echo "Word not found";
}
// Outputs: Word not found
// because 'ho' isn't a word in 'how are you'
隨着承認ABHI的回答,一對夫婦的建議:
我加了明確的== = 1到基於所述記錄的preg_match返回比較值
$needle = preg_quote($needle);
return preg_match("/\b$needle\b/i", $haystack) === 1;
我試過了,它工作。非常感謝。 – Tafu
如果您打算使用此功能,請參閱我的更新以使其更可靠。 – Alasdair