我正在尝试使用来自Matlab源代码的Java regex过滤掉所有形式的多行注释:%{(此处为任何东西)%} 。
我的测试文件如下:
a = magic(3);
%{
sum(a)
diag(a)
sum(diag(a))
%}
sum(diag(fliplr(a)))
我的模式如下:
%\\{.*%\\}\n
但是,当用空字符串替换文本中所有出现的此模式时(使用方法replaceAll),不会删除多行注释。为什么我的模式不好?
答案 0 :(得分:1)
您需要启用DOTALL模式(?s)
,以便正则表达式中的点也匹配换行符。此外,您还必须将.*
视为非贪婪。
"(?s)%\\{.*?%\\}\n?"
代码:
String inputString = "a = magic(3);\n" +
"%{\n" +
"sum(a)\n" +
"diag(a)\n" +
"sum(diag(a))\n" +
"%}\n" +
"sum(diag(fliplr(a)))";
System.out.println(inputString.replaceAll("(?s)%\\{.*?%\\}\n?", ""));
输出:
a = magic(3);
sum(diag(fliplr(a)))