在保持搜索逻辑的同时更快地替代 preg_match

Faster alternative to preg_match while maintaining search logic

我创建的搜索功能的速度存在一些问题。

我的搜索使用 preg_match 将关键字与文本分开。它可以搜索 "Intern" 但不能搜索 "Internet" 或 "International".

但是运行起来真的很慢,有什么可以加速的功能吗?

 foreach ($keywords as $Word)
 {
   if (preg_match("/\S*\b($Word)[s]?\b\S*/i", $Text))
   {
     return $Word;
   }
 }

谢谢:)

通过删除第一个 \S* 表达式已经足够快了。第二个在你的 preg_match.

中也是多余的

您还需要在双引号 PHP 正则表达式中双重转义特殊正则表达式元字符。

使用

foreach ($keywords as $Word)
 {
   if (preg_match("/\b(" . preg_quote($Word) . ")s?\b/i", $Text))
   {
     return $Word;
   }
 }

this IDEONE demo

请注意,如果 $keywords 数组中有特殊字符(如 [(),则需要使用 "/(?<!\w)(" . preg_quote($Word) . ")s?(?!\w)/i" 正则表达式。