pattern - Java regex replaceAll multiline
regex to java (3)
Tengo un problema con replaceAll para una cadena multilínea:
String regex = "//s*///*.*//*/";
String testWorks = " /** this should be replaced **/ just text";
String testIllegal = " /** this should be replaced /n **/ just text";
testWorks.replaceAll(regex, "x");
testIllegal.replaceAll(regex, "x");
Lo anterior funciona para testWorks, pero no para testIllegal !? ¿Por qué es eso y cómo puedo superar esto? Necesito reemplazar algo así como un comentario / * ... * / que abarca múltiples líneas.
Agregue Pattern.DOTALL
a la compilación o (?s)
al patrón.
Esto funcionaría
String regex = "(?s)//s*///*.*//*/";
Consulte Coincidencia de texto de líneas múltiples con expresión regular
El meta caracter coincide con cualquier carácter que no sea nueva línea. Es por eso que su expresión regular no funciona para el caso de múltiples líneas.
Para arreglar esto, reemplace .
con [/d/D]
que coincide con cualquier carácter, incluida la nueva línea.
Pattern.DOTALL
utilizar el indicador Pattern.DOTALL
para decir que el punto debe coincidir con las líneas nuevas. p.ej
Pattern.compile(regex, Pattern.DOTALL).matcher(testIllegal).replaceAll("x")
o alternativamente, especifique el indicador en el patrón usando (?s)
por ej.
String regex = "(?s)//s*///*.*//*/";