搜索字符串中的单词

时间:2011-11-11 19:13:10

标签: php

在php中搜索字符串并找到不区分大小写的匹配的最佳方法是什么?

例如:

$SearchString = "This is a test";

从这个字符串中,我想找到单词test,或TEST或Test。

谢谢!

修改

我还应该提一下,我想搜索字符串,如果它包含我的黑名单数组中的任何单词,请停止处理它。因此,“测试”的完全匹配很重要,但是,案例不是

5 个答案:

答案 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);