Ein OR eine oder egal was, nicht um das bekommen.
Wie @tim erwähnt kann es mit Lookahead (s) gemacht werden:
Sie können still stehen und den gleichen Text mehr als einmal ansehen.
So ist ein Weg, um jeden Ausdruck zu betrachten, ohne sich zu bewegen,
jeder Ausdruck ist optional. -
(?= (ee [0-9]{9} in)?)
(?= (ee [0-9]{9} [a-zA-Z]{3})?)
Das ist schlecht, weil, obwohl die Position nach dem letzten
Ausdruck vorantreiben wird, wird es nur 1 vorrücken interZeichenPosition. Es ermöglicht auch
ermöglicht Überlappung bei der Suche in einem globalen Kontext.
Die Suche kann durch den Verzehr von einem Zeichen beschleunigt werden -
(?= (ee [0-9]{9} in)?)
(?= (ee [0-9]{9} [a-zA-Z]{3})?)
.
Der Motor hat eine Optimierung, wenn etwas verbraucht wird,
Fortschritte in der Chunks (unbekannt, wie es entscheidet).
Wenn Sie andere Ausdrücke enthalten, müssen Sie die Position
hier vorrücken lassen oder nichts wird übereinstimmen. Dies könnte auch
überlappenden Matching von Text (wenn das ein Ziel ist) zu beseitigen.
Sein wirklich schwer Überschneidungen zu vermeiden, wenn Sie sicher einen Ausdruck wissen
länger sein als die andere. Wenn das der Fall ist, dann können Sie immer eine bedingte
(falls vorhanden) machen den größeren Text zu konsumieren -
(?= (ee [0-9]{9} in)?)
(?= (ee [0-9]{9} [a-zA-Z]{3})?)
(?(2) \2 | \1)
Und wenn Sie wissen, man eine Teilmenge der anderen ist, können Sie dies nur tun -
(?= (ee [0-9]{9} in)?) (ee [0-9]{9} [a-zA-Z]{3})
So oder so, je nach den Ausdrücken, viele Gedanken in der Entwicklung
Verbrauchs in die Regex gehen Überschneidungen zu vermeiden.
Dieses Beispiel macht nicht viel Sinn. * Sie * haben die Regexes konstruiert. Sie wissen also, dass jedes Mal, wenn * die erste Alternative übereinstimmt, die zweite auch übereinstimmt, weil die erste Regex eine "Teilmenge" der zweiten Regex ist. Warum würdest du das jemals brauchen? Können Sie sich ein realistischeres Beispiel vorstellen, das das eigentliche Problem zeigt, das Sie hier zu lösen versuchen? –