首页 > 解决方案 > Matlab中多行注释的正则表达式

问题描述

我尝试编写一个匹配此模式的正则表达式:

%{
...
...
%}

它还应该匹配:

sth   %{
...
...
  %}

或者

%{
something%}
%}again something
%}

但不是:

%{something
...
%}

或者

%{
...
%}something

或者

%{
...
something%}

所以它匹配任何字符后跟 %{ 的行和只有 %} 的行之间的所有内容(参见多行注释 Matlab:https ://fr.mathworks.com/help/matlab/matlab_prog/comments.html )

我试过这个:

     ^.*%\{\n(^((?!%\}).)*\n)*(\s)*%\}\n

它可以很好地找到块,但例如,它不匹配:

%{
%}something
...
%}

你有什么想法 ?

标签: javaregexmatlabcomments

解决方案


您可以使用

^.*%\{(?:\n(?!.*%\{).*)*\n\s*%\}$

请参阅正则表达式演示。将它与多行修饰符一起使用。

如果您的正则表达式引擎是 Java,您可以使用\R匹配任何换行符而\h不是\s匹配任何水平空格:

^.*%\{(?:\R(?!.*%\{).*)*\R\h*%\}$

请参阅此正则表达式演示

细节

  • ^- 一行的开始
  • .*- 尽可能多的除换行符以外的任何 0+ 字符
  • %\{- 一个%{子串
  • (?:\n(?!.*%\{).*)*- 0个或多个序列
    • \n(?!.*%\{)%{-当前行的任何地方都没有跟在换行符后面
    • .*- 尽可能多的除换行符以外的任何 0+ 字符
  • \n- 换行符
  • \s*- 0+ 个空格
  • %\}- 一个%}子串
  • $- 行结束。

推荐阅读