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

Eric Conner
la source
Ç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"));
cletus
la source
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