Если ваши регулярные выражения не являются тривиальными однострочными и вам нужна эффективность, вам нужно представить их в одном NFA (недетерминированный конечный автомат со значениями в конечных состояниях). Если для входа возможно совпадение с более чем одним регулярным выражением, тогда для конечных состояний потребуется набор значений.
На данный момент вы готовы рассмотреть вопрос об оптимизации автомата. Если это может быть практически определено (это даст вам DFA, который может быть экспоненциально больше, чем NFA), то непременно сделайте это. Получив DFA, вы можете эффективно (и однозначно с точностью до изоморфизма) минимизировать его (но поскольку у вас есть значения в ваших конечных состояниях, необходима очевидная модификация обычного алгоритма ).
Существуют также методы минимизации NFA напрямую. Например, если два состояния имеют одинаковые наборы суффиксов ({(остаток строки, значение)}), они эквивалентны и могут быть объединены. Эквивалентность в ациклическом NFA может быть сделана через хеш-код , начиная с конечных состояний.