php regex vs strpos准确性

时间:2013-12-02 02:43:29

标签: php regex

我已阅读其他帖子,比较这两个功能。 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个,每次比较都要遵循多个条件。

2 个答案:

答案 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专门用于表单验证。