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


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"));

¿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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.