Php 在保持搜索逻辑的同时,更快地替代preg_匹配

Php 在保持搜索逻辑的同时,更快地替代preg_匹配,php,regex,preg-match,Php,Regex,Preg Match,我创建的搜索函数的速度有一些问题 我的搜索使用preg_match从文本中分离关键字。它可以搜索“实习生”,但不能搜索“互联网”或“国际” 但它运行得非常慢,是否有任何方法可以加快函数的运行速度 foreach ($keywords as $Word) { if (preg_match("/\S*\b($Word)[s]?\b\S*/i", $Text)) { return $Word; } } 谢谢:)通过删除第一个\S*表达式已经足够快了。第二个在您的pr

我创建的搜索函数的速度有一些问题

我的搜索使用preg_match从文本中分离关键字。它可以搜索“实习生”,但不能搜索“互联网”或“国际”

但它运行得非常慢,是否有任何方法可以加快函数的运行速度

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

谢谢:)

通过删除第一个
\S*
表达式已经足够快了。第二个在您的
preg\u匹配中也是多余的

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

使用


请注意,如果在$keywords数组中有特殊字符(如
[
),则需要通过删除第一个
\S*
来使用
”/(?),该表达式已经足够快了。第二个表达式在
预匹配中也是多余的

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

使用


请注意,如果$keywords数组中有特殊字符(如
[
),则需要使用
”/(?删除第一个
\S*
表达式已经足够快了。第二个表达式在
preg\u match
中也是多余的。而且
\S*
在这种上下文中没有任何意义。
\S
匹配任何非空白字符,我不相信这是你的意思,而且
*
使它成为可选的,所以它是无论如何都没有效果(除了减慢匹配速度)。删除第一个
\S*
表达式将足够快。第二个表达式在您的
preg\u match
中也是多余的。
\S*
在这种上下文中没有任何意义。
\S
匹配任何非空白字符,我不相信这是您的意思,并且
*
使其成为可选字符,因此它是可选的无论如何都没有效果(除了减慢匹配速度)。谢谢你的智慧之言。我测试了3种加速搜索的方法,你的Chan至少提高了40%的速度。谢谢你的智慧之言。我测试了3种加速搜索的方法,你的Chan至少提高了40%的速度。
foreach ($keywords as $Word)
 {
   if (preg_match("/\\b(" . preg_quote($Word) . ")s?\\b/i", $Text))
   {
     return $Word;
   }
 }