Мне нужно искать входящие не очень длинные фрагменты текста для вхождений заданных строк. Строки постоянные для всего сеанса и не так много (~ 10). Дополнительное упрощение состоит в том, что ни одна из строк не содержится ни в одном другом.эффективный алгоритм для поиска одной из нескольких строк в тексте?
В настоящее время я использую подгонку регулярного выражения с str1 | str2 | ...
. Выполнение этой задачи важно, поэтому я задаюсь вопросом, могу ли я ее улучшить. Не то, чтобы я мог программировать лучше, чем парней, но, возможно, специальная реализация более эффективна, чем общая.
Поскольку строки остаются постоянными в течение длительного времени, я могу позволить себе построить структуру данных, такую как таблица перехода состояния, авансом.
например, если строки abcx
, bcy
и cz
, и я читал до сих пор abc
, я должен быть в связанном состоянии, что означает you're either 3 chars into string 1, 2 chars into string 2 or 1 char into string 1
. Затем чтение x
следующего переместит меня в состояние string 1 matched
и т. Д., И любой символ, отличный от xyz
, переместится в исходное состояние, и мне не нужно будет возвращать его обратно до b
.
Любые идеи или ссылки приветствуются.
Вы работаете с предварительно скомпилированным объектом регулярного выражения? – 2010-08-24 19:46:26
Я не знаю о boost: Но большинство языков, которые используют регулярные выражения. используйте регулярные выражения для создания эквивалента конечного конечного автомата, который используется для синтаксического анализа текста, поэтому он достаточно эффективен. –
Пожалуйста, разместите регулярное выражение, которое вы используете. Там может быть место для улучшения. –