Operador OR de expressão regular Java


87

Pode ser uma pergunta idiota, mas não consegui encontrar em lugar nenhum:

Como posso usar o operador de expressão regular java OR (|) sem parênteses?

por exemplo: Tel | Telefone | Fax


Parece bom, que problema você está tendo?
danben

1
sim, deve funcionar. cletus, danben e eu concordamos. também, @danben - meu nome é Dan Beam, lol, tão perto!
Dan Beam

Respostas:


154

Você pode apenas usar o tubo sozinho:

"string1|string2"

por exemplo:

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

Resultado:

blah, blah, string3

A principal razão para usar parênteses é para limitar o escopo das alternativas:

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

tem a mesma saída. mas se você apenas fizer isso:

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

você obtém:

blah, stringblah, string3

porque você disse "string1" ou "2".

Se você não quiser capturar essa parte da expressão, use ?::

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

E se eu precisar delimitar essas strings de outras partes da regex que também são strings? por exemplo, eee (ff | gg) eee Devo usar parênteses?
Eric Conner

Ah deixa pra lá. Sua atualização corrige isso. O último exemplo é o que eu estava procurando. Obrigado!
Eric Conner
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.