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

Eric Conner
quelle
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"));
Cletus
quelle
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