Wenn Ihr regexps sind nicht trivial Einzelsaiten, und Sie sorgen für Effizienz, würden Sie sie in einem einzigen NFA (nondeterministic finite-state automaton, mit Werten in Endzustände darstellen wollen. Wenn es für eine Eingabe möglich ist, mehr als eine Regexp zu finden, benötigen Endzustände eine Reihe von Werten.
An diesem Punkt sind Sie bereit, über die Optimierung des Automaten nachzudenken. Wenn es praktisch determiniert werden kann (dies gibt Ihnen ein DFA, das exponentiell größer sein kann als das NFA), dann tun Sie das auf jeden Fall. Sobald Sie ein DFA haben, können Sie es effizient (und bis zu Isomorphismus) minimieren (aber da Sie Werte in Ihren Endzuständen haben, ist eine offensichtliche Modifikation des usual algorithm erforderlich).
Es gibt auch Techniken zur direkten Minimierung von NFA. Wenn beispielsweise zwei Zustände die gleichen Suffix-Sätze ({(Rest der Zeichenkette, Wert)} haben), sind sie gleichwertig und können kombiniert werden. Äquivalenz in einem azyklischen NFA kann ausgehend von den Endzuständen über hash-consing erfolgen.
Basierend auf den bisherigen Antworten möchten Sie vielleicht mehr Details zu Ihrer speziellen Anwendung bereitstellen. –
Etwa wie viele Ausdrücke sind in einer Tonne? Wie groß ist der Text, zu dem sie passen? Wie oft wird neuer Text bereitgestellt? Wie schnell müssen die Ergebnisse zurückgegeben werden? – TrueWill