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

Regex for %{ ... %} comment

我正在尝试使用 Java 正则表达式从 Matlab 源代码中过滤掉所有形式的多行注释:%{(此处为任何内容)%}

我的测试文件如下:

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

我的模式如下:

%\{.*%\}\n

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

您需要启用 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)))