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 java regex 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
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
Respostas:
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:
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:
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"));
fonte