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.