在字符串中搜索单词的最佳方法是什么
preg_match("/word/",$string)
stripos("word",$string)
或者有更好的方法
答案 0 :(得分:6)
使用正则表达式完成此工作的一个好处是能够在正则表达式中使用\b
(Regexp 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等于false
如stripos()
,如果使用严格相等则不会有问题。