webentwicklung-frage-antwort-db.com.de

Kann ich ein OR in regulären Ausdrücken verwenden, ohne den Inhalt zu erfassen?

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.

93
goggin13

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.

146
Gumbo

Wenn Ihre Implementierung dies aufweist, können Sie nicht erfassende Klammern verwenden:

(?:a|b)
21

Selbst Rubel lässt Sie keine Klammern verwenden und die Rangfolge von | ist niedrig. Zum Beispiel a | bc stimmt nicht mit ccc überein

1
msw