Regex em uma expressão contendo "\|" [ RESOLVIDO ]

7 respostas
G

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.

Alguma ideia?

Obrigado.

7 Respostas

Giulliano

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

Nao posso usar pois preciso do \ e do |
Só nao posso ter os dois juntos

M

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.

  1. pra capturar a sequencia “|” em regex vc deve escapar os dois caracteres.
    “” fica “\”, “|” fica “|”
    entao nosso regex fica “\|”.
  2. 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

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…

mas bom que o problema foi resolvido… flw

Criado 24 de janeiro de 2008
Ultima resposta 24 de jan. de 2008
Respostas 7
Participantes 5