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

Eric Conner
fonte
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"));
cletus
fonte
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