Java 正则表达式替换所有多行

2022-08-31 20:27:44

我对多行字符串的替换All有问题:

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!?这是为什么,我该如何克服?我需要替换一些像注释 /* ... */ 这样的东西,它跨越多行。


答案 1

您需要使用标志来表示点应与换行符匹配。例如:Pattern.DOTALL

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

或者使用例如在模式中指定标志(?s)

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

答案 2

添加到编译或模式中。Pattern.DOTALL(?s)

这将起作用

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

请参阅使用正则表达式匹配多行文本