在保持搜索逻辑的同时更快地替代 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;
}
}
请注意,如果 $keywords 数组中有特殊字符(如 [
或 (
),则需要使用 "/(?<!\w)(" . preg_quote($Word) . ")s?(?!\w)/i"
正则表达式。
我创建的搜索功能的速度存在一些问题。
我的搜索使用 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;
}
}
请注意,如果 $keywords 数组中有特殊字符(如 [
或 (
),则需要使用 "/(?<!\w)(" . preg_quote($Word) . ")s?(?!\w)/i"
正则表达式。