Opérateur OR d'expression régulière Java


87

C'est peut-être une question stupide, mais je ne l'ai trouvée nulle part:

Comment puis-je utiliser l'opérateur d'expression régulière Java OR (|) sans parenthèses?

Exemple: Tél | Téléphone | Fax


Ça va, quel problème avez-vous?
danben

1
ouais, devrait fonctionner. cletus, danben et moi sommes d'accord. aussi, @danben - mon nom est Dan Beam, lol, si proche!
Dan Beam

Réponses:


154

Vous pouvez simplement utiliser le tuyau seul:

"string1|string2"

par exemple:

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

Production:

blah, blah, string3

La principale raison d'utiliser des parenthèses est de limiter la portée des alternatives:

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

a la même sortie. mais si vous faites juste ceci:

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

vous obtenez:

blah, stringblah, string3

parce que vous avez dit "string1" ou "2".

Si vous ne souhaitez pas capturer cette partie de l'expression, utilisez ?::

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

Que faire si je dois délimiter ces chaînes des autres morceaux de l'expression régulière qui sont également des chaînes? par exemple eee (ff | gg) eee Dois-je utiliser des parenthèses?
Eric Conner

Ah laisse tomber. Votre mise à jour le corrige. Le dernier exemple est ce que je cherchais. Merci!
Eric Conner
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.