正则表达式%{...%}评论

时间:2015-01-12 16:45:28

标签: java regex matlab comments

我正在尝试使用来自Matlab源代码的Java regex过滤掉所有形式的多行注释:%{(此处为任何东西)%}

我的测试文件如下:

a = magic(3);
%{
sum(a)
diag(a)
sum(diag(a))
%}
sum(diag(fliplr(a)))

我的模式如下:

%\\{.*%\\}\n

但是,当用空字符串替换文本中所有出现的此模式时(使用方法replaceAll),不会删除多行注释。为什么我的模式不好?

1 个答案:

答案 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)))