检查字符串中的单词

时间:2010-10-20 21:35:20

标签: php

在字符串中搜索单词的最佳方法是什么

preg_match("/word/",$string)

stripos("word",$string)

或者有更好的方法

5 个答案:

答案 0 :(得分:6)

使用正则表达式完成此工作的一个好处是能够在正则表达式中使用\bRegexp word boundary)以及其他随机派生。如果您只是在字符串stripos中查找字母序列,则可能是 little 更好。

$tests = array("word", "worded", "This also has the word.", "Words are not the same", "Word capitalized should match");
foreach ($tests as $string)
{
  echo "Testing \"$string\": Regexp:";
  echo preg_match("/\bword\b/i", $string) ? "Matched" : "Failed";
  echo " stripos:";
  echo stripos("word", $string) >= 0 ? "Matched": "Failed";
  echo "\n";
}

结果:

Testing "word": Regexp:Matched stripos:Matched
Testing "worded": Regexp:Failed stripos:Matched
Testing "This also has the word.": Regexp:Matched stripos:Matched
Testing "Words are not the same": Regexp:Failed stripos:Matched
Testing "Word capitalized should match": Regexp:Matched stripos:Matched

答案 1 :(得分:4)

就像preg_match的注释中所说的那样:

  

如果您只想检查另一个字符串中是否包含一个字符串,请不要使用preg_match()。使用strpos()或strstr()代替它们会更快。

答案 2 :(得分:2)

如果您只是在寻找子字符串stripos()strpos(),而且朋友比使用preg系列函数要好得多。

答案 3 :(得分:1)

对于简单的字符串匹配,PHP字符串函数可提供更高的性能。正则表达式更重量级,因此性能更低。

话虽如此,在大多数情况下,性能差异很小,不会被忽视,除非你循环遍历数十万或更多元素的数组。

当然,只要你开始需要“聪明”匹配,正则表达式就会成为城里唯一的游戏。

答案 4 :(得分:0)

还有substr_count($haystack, $needle)只返回子字符串出现的次数。如果第一次出现在位置0,则不必担心0等于falsestripos(),如果使用严格相等则不会有问题。

http://php.net/manual/en/function.substr-count.php