%{ ... %} 评论的正则表达式
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)))
我正在尝试使用 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)))