Ich verwende rubular.com , um meinen regulären Ausdruck zu erstellen, und die Dokumentation beschreibt Folgendes:
(...) Capture everything enclosed
(a|b) a or b
Wie kann ich einen OR Ausdruck verwenden, ohne zu erfassen, was darin enthalten ist? Angenommen, ich möchte entweder "ac" oder "bc" erfassen. Ich kann den regulären Ausdruck nicht verwenden
(a|b)(c)
recht? Seitdem nehme ich entweder "a" oder "b" in einer Gruppe und "c" in einer anderen auf, nicht dasselbe. Ich weiß, dass ich durch die erfassten Ergebnisse filtern kann, aber das scheint mehr Arbeit zu sein ...
Vermisse ich etwas Offensichtliches? Ich benutze dies in Java, wenn das relevant ist.
Abhängig von der Implementierung des regulären Ausdrucks können Sie sogenannte nicht einfangende Gruppen mit der Syntax (?:…)
Verwenden:
((?:a|b)c)
Hier ist (?:a|b)
Eine Gruppe, aber Sie können nicht auf ihre Übereinstimmung verweisen. Sie können also nur auf die Übereinstimmung von ((?:a|b)c)
Verweisen, die entweder ac
oder bc
ist.
Wenn Ihre Implementierung dies aufweist, können Sie nicht erfassende Klammern verwenden:
(?:a|b)
Selbst Rubel lässt Sie keine Klammern verwenden und die Rangfolge von |
ist niedrig. Zum Beispiel a | bc stimmt nicht mit ccc überein