Jeśli wyrażenia regularne nie są trywialne single-strings, a zależy Ci na wydajności, którą chcesz do reprezentowania ich w jednym NFA (nondeterministic finite-state automaton, o wartościach w stanach końcowych. Jeśli dane wejściowe mogą pasować do więcej niż jednego wyrażenia regularnego, wówczas stany końcowe będą wymagały zestawu wartości.
W tym momencie jesteś gotowy rozważyć optymalizację automatu. Jeśli można go praktycznie zdeterminować (daje to DFA, który może być wykładniczo większy niż NFA), to zrób to. Kiedy już masz DFA, możesz efektywnie (i unikalnie do izomorfizmu) zminimalizować (ale ponieważ masz wartości w swoich końcowych stanach, konieczna jest oczywista modyfikacja usual algorithm).
Istnieją również techniki minimalizacji bezpośredniego NFA. Na przykład, jeśli dwa stany mają takie same zestawy sufiksów ({(reszta łańcucha, wartość)}) są one równoważne i mogą być łączone. Równoważność w acyklicznym NFA można uzyskać przez stany końcowe, zaczynając od hash-consing.
Na podstawie dotychczasowych odpowiedzi warto podać więcej szczegółów w pytaniu dotyczącym konkretnej aplikacji. –
Mniej więcej ile wyrażeń jest w tonie? Jak duży jest tekst, który będą pasować? Jak często będzie dostarczany nowy tekst? Jak szybko należy zwrócić wyniki? – TrueWill