Matlab中多行注释的正则表达式

Regular expression for multiline commentary in Matlab

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

%{
...
...
%}

它还应该匹配:

sth   %{
...
...
  %}

%{
something%}
%}again something
%}

但不是:

%{something
...
%}

%{
...
%}something

%{
...
something%}

因此它匹配任何字符后跟 %{ 的行和仅包含 %} 的行之间的所有内容(请参阅多行注释 Matlab:https://fr.mathworks.com/help/matlab/matlab_prog/comments.html

我试过了:

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

找到区块效果很好,但是例如,它不匹配:

%{
%}something
...
%}

你有什么想法吗?

您可以使用

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

regex demo。将它与多行修饰符一起使用。

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

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

参见 this regex demo

详情

  • ^ - 行首
  • .* - 除换行字符外的任何 0+ 个字符尽可能多
  • %\{ - %{ 子串
  • (?:\n(?!.*%\{).*)* - 0 个或多个序列
    • \n(?!.*%\{) - 在当前行
    • 的任何地方不跟%{ 的换行符
    • .* - 除换行字符外的任何 0+ 个字符尽可能多
  • \n - 一个换行符
  • \s* - 0+ 个空格
  • %\} - %} 子串
  • $ - 行尾。