Java: expresión regular para hacer coincidir una barra invertida seguida de una comilla

¿Cómo escribir una expresión regular para que coincida con esta \" (una barra invertida luego una cita)? Supongamos que tengo una cadena como esta:

  click to search  

Necesito reemplazar todo el \" con a " , así que el resultado sería:

  click to search  

Este no funciona: str.replaceAll("\\\"", "\"") porque solo coincide con la cita. No estoy seguro de cómo moverse con la barra invertida. Podría haber eliminado la barra invertida primero, pero hay otras barras invertidas en mi cadena.

Si reemplaza los literales y no necesita la syntax de regex en lugar de replaceAll use replace

 str = str.replace("\\\","\""); 

Ambos métodos reemplazarán todas las ocurrencias de objectives, pero replace tratarán los objectives literalmente.


PERO si realmente debe usar expresiones regulares que está buscando

 str = str.replaceAll("\\\\\"", "\"") 

\ es un carácter especial en expresiones regulares (se usa, por ejemplo, para crear \d – clase de caracteres que representa dígitos). Para que regex sea un personaje normal, debe colocar otro \ antes para desactivar su significado especial (debe escaparse). Entonces, la expresión regular que estamos tratando de crear es \\ .

Pero para crear una cadena que represente \\ para que pueda pasarla al motor de regex, debe escribirla como four \ ( "\\\\" ), porque \ también es un carácter especial en String (se puede usar, por ejemplo, como \t para representar el tabulador) por lo que también debe escapar de ambos \ allí.

En otras palabras, necesitas escapar \ dos veces:

  • una vez en expresiones regulares \\
  • y una vez en String "\\\\"

No necesitas una expresión regular.

 str.replace("\\\"", "\"") 

debería funcionar bien

El método de replace toma dos subcadenas y reemplaza todas las ocurrencias no superpuestas de la primera con la segunda. Por el javadoc :

 public String replace(CharSequence target, CharSequence replacement) 

Reemplaza cada subcadena de esta cadena que coincide con la secuencia objective literal con la secuencia de reemplazo literal especificada. El reemplazo procede desde el comienzo de la cadena hasta el final, por ejemplo, reemplazar "aa" con "b" en la cadena "aaa" dará como resultado "ba" lugar de "ab" .

intente esto: str.replaceAll("\\\\\"", "\\\"")
porque Java reemplazará \ dos veces:

(1) \\\\\" -> \\" (para cadena)
(2) \\" -> \" (para expresiones regulares)