Operador OR de expresión regular de Java

87

Esta puede ser una pregunta tonta, pero no pude encontrarla en ningún lado:

¿Cómo puedo usar el operador de expresión regular de Java OR (|) sin paréntesis?

por ejemplo: Tel | Phone | Fax

Eric Conner
fuente
Se ve bien, ¿qué problema tienes?
danben
1
sí, debería funcionar. Cletus, Danben y yo estamos de acuerdo. también, @danben - mi nombre es Dan Beam, jajaja, ¡tan cerca!
Dan Beam

Respuestas:

154

Puedes usar la tubería por sí sola:

"string1|string2"

por ejemplo:

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

Salida:

blah, blah, string3

La razón principal para usar paréntesis es limitar el alcance de las alternativas:

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

tiene la misma salida. pero si solo haces esto:

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

usted obtiene:

blah, stringblah, string3

porque ha dicho "cadena1" o "2".

Si no desea capturar esa parte de la expresión, utilice ?::

String s = "string1, string2, string3";
System.out.println(s.replaceAll("string(?:1|2)", "blah"));
cletus
fuente
¿Qué sucede si necesito delimitar estas cadenas de otras partes de la expresión regular que también son cadenas? ej. eee (ff | gg) eee ¿Tengo que usar paréntesis?
Eric Conner
Ah no importa. Tu actualización lo corrige. El último ejemplo es lo que estaba buscando. ¡Gracias!
Eric Conner