Regex em uma expressão contendo "\|" [ RESOLVIDO ]
7 respostas
G
gustavo_apsilva
Ae galera.
Me deparei com este problema.
Tenho uma string, como a seguinte
" Descrição qualquer | com alguma iformação \ que preciso | tratar | "
eu preciso remover o | e susbtituir unicamente por |, mas nao pode influenciar nos outos [b][/b]
tentei usando replaceAll mas nao obtive sucesso.
Se colocasse replaceAll("|","|") ele me retorna erro pois o \ é caractere de escape
Se colocar replaceAll("\|","|") ele nao reconhecia o | da minha string como expressão que deveria substituir.
Não entendi pq ele não reconheceu…tem certeza disso ???
E se vc usasse dois replaceAll um para as “\” e outro para o pipe “|”
G
gustavo_apsilva
Nao posso usar pois preciso do \ e do |
Só nao posso ter os dois juntos
M
moises.trovo
eh um pouco complexo…
oh: vc passa uma regex mas só que ela eh literal string no momento, entao vc vai passar por dois tipos de escape de caracteres, o escape de String do java e o escape proprio do regex.
pra capturar a sequencia “|” em regex vc deve escapar os dois caracteres.
“” fica “\”, “|” fica “|”
entao nosso regex fica “\|”.
agora vc deve passar essa string para literal do Java.
Como só é necessário escapar o “” a String fica:
pattern = “\\\|”
Meio complexo o resultado neah?
entao vai ficar assim o seu código: s.replaceAll("\\\|", “|”);
FLWzzz
G
gustavo_apsilva
Perfeito, funcionou certinho.
Obrigado
Giulliano
Mais bizarro que isso…eu abandano a TI…rsss
marcosmoura
Moisés, sua solução funcionou que é uma beleza.
Gustavo, se você necessita trocar somente o primeiro |, basta colocar replaceFirst ao invés de replaceAll.
Omeganosferatu
Quanto mais eu conheço … mais medo eu tenho !
aehuaehuaeh
Eu tava achano que era por causa da forma que o algoritmo do replaceAll faz a busca…
tinha testado com o split … e funcionava simplesmente “\|” estranhow…