例如,如果我的句子是$sent = 'how are you';,如果我搜索$key = 'ho'使用strstr($sent, $key)它将返回,true因为我的句子ho在其中.
我正在寻找的是一种方法,如果我只搜索你是怎么回事,你或者是你.我怎样才能做到这一点?
您可以使用preg-match使用带有字边界的正则表达式的函数:
if(preg_match('/\byou\b/', $input)) {
echo $input.' has the word you';
}
Run Code Online (Sandbox Code Playgroud)
如果你想检查同一个字符串中的多个单词,并且你正在处理大字符串,那么这个更快:
$text = explode(' ',$text);
$text = array_flip($text);
Run Code Online (Sandbox Code Playgroud)
然后你可以检查单词:
if (isset($text[$word])) doSomething();
Run Code Online (Sandbox Code Playgroud)
这种方法很快.
但是要检查短字符串中的几个单词,请使用preg_match.
更新:
如果你真的要使用它,我建议你这样实现它以避免问题:
$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();
Run Code Online (Sandbox Code Playgroud)
然后双倍空格,换行符,标点符号和大写字母不会产生错误否定.
这种方法在检查大字符串中的多个单词(即整个文本文档)时要快得多,但如果你想要做的就是查找普通大小字符串中是否存在单个单词,那么使用preg_match会更有效.