Как лучше всего найти слова из набора слов в строке? - PullRequest
1 голос
/ 21 февраля 2020

Я должен обнаружить наличие некоторых слов (даже многозначных c, как в «сумке слов») в строке, предоставленной пользователем.

Мне нужно найти точное слово, а не часть так что, семья strstr/strpos/stripos не подходит для меня.

Мой текущий подход (PHP/PCRE regex) следующий:

\b(first word|second word|many other words)\b

Есть ли какой-нибудь другой лучший подход? Я упускаю что-то важное?

Слова примерно 1500.

Любая помощь приветствуется

1 Ответ

1 голос
/ 21 февраля 2020

Регулярное выражение, как вы демонстрируете, будет работать. Может быть сложно поддерживать, если список слов увеличивается или изменяется.

Используемый вами метод будет работать в том случае, если вам нужно искать фразы с пробелами, а список не будет сильно расти. .

Если в искомых словах нет пробелов, вы можете разбить входную строку на пробелы (\s+, см. https://www.php.net/manual/en/function.preg-split.php), затем установите флажок для посмотрите, есть ли какое-либо из этих слов в наборе (https://www.php.net/manual/en/class.ds-set.php), состоящем из слов, которые вы ищете. Это будет немного больше кода, но требует меньше регулярных выражений, поэтому ymmv зависит от вашего приложения.

Если в наборе есть пробелы, рассмотрите вместо этого использование Tr ie. Виктор Стрибьев предлагает: https://github.com/sters/php-regexp-trie

...