在php中搜索字符串并找到不区分大小写的匹配的最佳方法是什么?
例如:
$SearchString = "This is a test";
从这个字符串中,我想找到单词test,或TEST或Test。
谢谢!
修改
我还应该提一下,我想搜索字符串,如果它包含我的黑名单数组中的任何单词,请停止处理它。因此,“测试”的完全匹配很重要,但是,案例不是
答案 0 :(得分:2)
如果你想找到单词,并且想要禁止“FU”而不是“有趣”,你可以使用regularexpresions whit \ b,其中\ b标记单词的开头和结尾, 所以,如果你搜索“\ bfu \ b”,如果不匹配“有趣”, 如果你在分隔符后面添加一个“i”,它的搜索案例就不对了, 如果你有一个像“fu”“foo”“bar”这样的单词列表你的模式可能如下所示: “#\ b(fu | foo | bar)\ b #i”,或者您可以使用变量:
if(preg_match("#\b{$needle}\b#i", $haystack))
{
return FALSE;
}
编辑,根据评论中的要求添加了多字示例whit char escaping:
/* load the list somewhere */
$stopWords = array( "word1", "word2" );
/* escape special characters */
foreach($stopWords as $row_nr => $current_word)
{
$stopWords[$row_nr] = addcslashes($current_word, '[\^$.|?*+()');
}
/* create a pattern of all words (using @ insted of # as # can be used in urls) */
$pattern = "@\b(" . implode('|', $stopWords) . ")\b@";
/* execute the search */
if(!preg_match($pattern, $images))
{
/* no stop words */
}
答案 1 :(得分:1)
你可以做一些事情,但我倾向于使用其中一种:
您可以使用stripos()
if (stripos($searchString,'test') !== FALSE) {
echo 'I found it!';
}
您可以将字符串转换为特定情况,并使用strpos()
if (strpos(strtolower($searchString),'test') !== FALSE) {
echo 'I found it!';
}
我做到了两个并没有偏好 - 一个可能比另一个更有效(我怀疑第一个更好)但我实际上并不知道。
作为一些可怕的例子,你可以:
i
修饰符if (count(explode('test',strtolower($searchString))) > 1)
答案 2 :(得分:0)
stripos
。据推测它会在找到匹配时停止搜索,我猜在内部它会转换为较低(或较高)的情况,这样就会达到和你一样好。
答案 3 :(得分:0)
我没有正确地阅读这个问题。正如其他答案中所述,stripos或preg_match函数将完全符合您的要求。
我最初提供了stristr函数作为答案,但如果您只是想在另一个字符串中查找字符串,则实际上不应该使用它,因为除了搜索参数之外它还会返回字符串的其余部分。 / p>
答案 4 :(得分:0)
http://us3.php.net/manual/en/function.preg-match.php
取决于您是否只想匹配
在这种情况下,你会这样做:
$SearchString= "This is a test";
$pattern = '/[Test|TEST]/';
preg_match($pattern, $SearchString);