Если регэксп не являются тривиальными Однополочными строками, и вы ухаживаете за эффективность, вы хотите, чтобы представить их в одном NFA (nondeterministic finite-state automaton, со значениями в конечных состояниях. Если возможно, что вход соответствует более чем одному регулярному выражению, то конечным состояниям потребуется набор значений.
На данный момент вы готовы рассмотреть возможность оптимизации автомата. Если он может быть практически определен (это даст вам DFA, который может быть экспоненциально больше, чем NFA), то обязательно это сделайте. Если у вас есть DFA, вы можете эффективно (и однозначно до изоморфизма) свести его к минимуму (но поскольку у вас есть значения в ваших конечных состояниях, необходима очевидная модификация usual algorithm).
Существуют также методы минимизации NFA непосредственно. Например, если два состояния имеют одинаковые наборы суффиксов ({(остаток строки, значение)}), они эквивалентны и могут быть объединены. Эквивалентность в ациклическом NFA может быть выполнена через hash-consing, начиная с конечных состояний.
Основываясь на ответах на данный момент, вы можете указать более подробные сведения о своем конкретном приложении. –
Примерно, сколько выражений в тонне? Насколько велика будет текст, который они будут сопоставлять? Как часто будет предоставляться новый текст? Как быстро результаты должны быть возвращены? – TrueWill