Подтвердить что ты не робот

Java regex replaceAll многострочный

У меня есть проблема с replaceAll для многострочной строки:

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"); 

Вышеупомянутые работы для testWorks, но не для testIllegal!? Почему это и как я могу это преодолеть? Мне нужно заменить что-то вроде комментария /*... */, который охватывает несколько строк.

4b9b3361

Ответ 1

Вам нужно использовать флаг Pattern.DOTALL, чтобы сказать, что точка должна соответствовать символам новой строки. например.

Pattern.compile(regex, Pattern.DOTALL).matcher(testIllegal).replaceAll("x")

или укажите флаг в шаблоне, используя (?s), например.

String regex = "(?s)\\s*/\\*.*\\*/";

Ответ 2

Добавьте Pattern.DOTALL в компиляцию или (?s) в шаблон.

Ответ 3

Метасимвол . соответствует любому символу, отличному от новой строки. Вот почему ваше регулярное выражение не работает в случае с несколькими линиями.

Чтобы исправить это, замените . на [\d\D], который соответствует символу любой, включая новую строку.

Код в действии