Operatore OR di espressione regolare Java


87

Questa potrebbe essere una domanda stupida, ma non sono riuscita a trovarla da nessuna parte:

Come posso utilizzare l'operatore java OR di espressione regolare (|) senza parentesi?

es: Tel | Telefono | Fax


Sembra ok, che problema hai?
danben

1
sì, dovrebbe funzionare. cletus, danben e io siamo d'accordo. inoltre, @danben - il mio nome è Dan Beam, lol, così vicino!
Dan Beam

Risposte:


154

Puoi semplicemente usare il tubo da solo:

"string1|string2"

per esempio:

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

Produzione:

blah, blah, string3

Il motivo principale per utilizzare le parentesi è limitare la portata delle alternative:

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

ha lo stesso output. ma se fai solo questo:

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

ottieni:

blah, stringblah, string3

perché hai detto "stringa1" o "2".

Se non vuoi catturare quella parte dell'espressione usa ?::

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

E se avessi bisogno di delimitare queste stringhe da altri pezzi della regex che sono anche stringhe? es. eee (ff | gg) eee Devo usare le parentesi?
Eric Conner

Ah non importa. Il tuo aggiornamento lo risolve. L'ultimo esempio è quello che stavo cercando. Grazie!
Eric Conner
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.