Java-Operator für reguläre Ausdrücke ODER


86

Dies mag eine dumme Frage sein, aber ich konnte sie nirgendwo finden:

Wie kann ich den Operator für Java ODER reguläre Ausdrücke (|) ohne Klammern verwenden?

zB: Tel | Telefon | Fax


Sieht ok aus, welches Problem hast du?
— Danben

1
Ja, sollte funktionieren. Cletus, Danben und ich sind uns einig. auch @danben - mein Name ist Dan Beam, lol, so nah!
— Dan Beam

Antworten:


150

Sie können das Rohr einfach alleine verwenden:

"string1|string2"

beispielsweise:

String s = "string1, string2, string3";
System.out.println(s.replaceAll("string1|string2", "blah"));

Ausgabe:

blah, blah, string3

Der Hauptgrund für die Verwendung von Klammern besteht darin, den Umfang der Alternativen einzuschränken:

String s = "string1, string2, string3";
System.out.println(s.replaceAll("string(1|2)", "blah"));

hat den gleichen Ausgang. aber wenn Sie dies nur tun:

String s = "string1, string2, string3";
System.out.println(s.replaceAll("string1|2", "blah"));

du erhältst:

blah, stringblah, string3

weil du "string1" oder "2" gesagt hast.

Wenn Sie diesen Teil des Ausdrucks nicht erfassen möchten, verwenden Sie ?::

String s = "string1, string2, string3";
System.out.println(s.replaceAll("string(?:1|2)", "blah"));

Was ist, wenn ich diese Zeichenfolgen von anderen Teilen des regulären Ausdrucks abgrenzen muss, die ebenfalls Zeichenfolgen sind? zB eee (ff | gg) eee Muss ich Klammern verwenden?
— Eric Conner

Ah vergiss es. Ihr Update behebt das Problem. Das letzte Beispiel ist das, wonach ich gesucht habe. Vielen Dank!
— Eric Conner
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.