У меня возникло несколько проблем со скоростью функции поиска, которую я создал.
В моем поиске используется preg_match, чтобы отделить ключевые слова от текста. Он может искать "Интернационал", но не "Интернет" или "Международный".
Но он работает очень медленно, есть ли способ ускорить работу?
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;
}
}
См. Эту демонстрационную версию IDEONE
Обратите внимание: если у вас есть специальные символы (например, [
или (
) внутри массива $ keywords, вам нужно использовать "/(?<!\\w)(". preg_quote($Word). ")s?(?!\\w)/i"
регулярное выражение.
\S*
выражение будет достаточно быстрым. Второй также избыточен в вашемpreg_match
.\S*
не имеет смысла в этом контексте в любом случае.\S
соответствует любому непробельному символу, что я не могу поверить в то, что вы имели в виду, и*
делает его необязательным, так что в любом случае это не имеет никакого эффекта (кроме как для замедления соответствия).