我已阅读其他帖子,比较这两个功能。 strpos()
和preg_match()
。我知道如果您知道要查找的确切字符串,strpos()
就是要走的路,但如果搜索主题出现在字符串中会怎么样。
$string = 'Honda 1974 1975 CB200 T Front ATK Wheel Hub w/ Brake Disc Rotor 18" x 1.60 Straight!';
我需要寻找CB200和其他类似的模型,如CB1000,CR250,CR125等。
如果我用过
preg_match('/^.*\b(c{1}b{1}2{1}0{1}0{1})\b.*$/i',$string)
我会在前面或后面没有任何内容的情况下得到那个确切的字符串,但strpos($string,'CB200')
无论搜索主题的前面或后面是什么都会找到匹配。
示例:Honda FrontCB200ATK Wheel Hub
。如果那是一个部件号,则strpos()
将失败。我可以使strpos()
更准确,还是需要在这种情况下使用preg_match()
?放弃strpos()
的速度。该脚本将在每次执行时比较多达10,000 $string
个,每次比较都要遵循多个条件。
答案 0 :(得分:1)
每个人对某事都有不同的看法,比较的最佳方法就是其中之一。
我很可能更喜欢使用strpos()
而不是preg_match()
,因为正则表达式通常更贵。这两个函数都很快,但如果您担心性能,那么在这种情况下您应该使用strpos()
来测试字符串。
preg_match()
的文档明确指出:
如果您只想检查另一个字符串中是否包含一个字符串,请不要使用preg_match()。使用strpos()或strstr()代替它们会更快。
如果您想使用preg_match()
,我会将您的表达式重写为以下内容。
preg_match('/\b(?:cb[12]000?|cr[12][25][50])\b/i', $string);
答案 1 :(得分:0)
由于preg_match()的准确性,我倾向于使用preg_match专门用于表单验证。