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

Java Matlab中多行注释的正则表达式,java,regex,matlab,comments,Java,Regex,Matlab,Comments,我尝试编写一个与此模式匹配的regexp: %{ ... ... %} 它还应匹配: sth %{ ... ... %} 或 但不是: %{something ... %} 或 或 因此,它匹配任何字符后跟%{的行和只有%}的行之间的所有内容(请参见多行注释Matlab:) 我试过这个: ^.*%\{\n(^((?!%\}).)*\n)*(\s)*%\}\n 它可以很好地查找块,但例如,它不匹配: %{ %}something ... %} 你有什么想法吗?你可以用

我尝试编写一个与此模式匹配的regexp:

%{
...
...
%}
它还应匹配:

sth   %{
...
...
  %}

但不是:

%{something
...
%}

因此,它匹配任何字符后跟%{的行和只有%}的行之间的所有内容(请参见多行注释Matlab:)

我试过这个:

     ^.*%\{\n(^((?!%\}).)*\n)*(\s)*%\}\n
它可以很好地查找块,但例如,它不匹配:

%{
%}something
...
%}
你有什么想法吗?

你可以用

^.*%\{(?:\n(?!.*%\{).*)*\n\s*%\}$
看。将其与多行修改器一起使用

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

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

详细信息

  • ^
    -行的开头
  • *
    -尽可能多的0+字符(断线字符除外)
  • %\{
    -一个
    %{
    子字符串
  • (?:\n(?。*%\{.*)*
    -0个或多个
    • \n(?。*%\{)
      -在当前行的任何位置都没有紧跟
      %{
      的换行符
    • *
      -尽可能多的0+字符(断线字符除外)
  • \n
    -换行符
  • \s*
    -0+空格
  • %\}
    -a
    %}
    子字符串
  • $
    -行结束

试试
^.*%\{\n(?:(?!%\{)。*\n)*\s*%\}$
,请参阅,谢谢您的回答。它似乎不起作用,请参阅,我觉得它甚至在您提供的链接中也起作用。最后一个示例是否匹配?在我提供的最后一个示例中,您可以看到行leftpanel=treepanel也匹配或不匹配。但是,如果我删除行开头的空白,它将匹配正确y、
^.*%\{(?:\n(?。*%\{.*)*\n\s*%\}$
?请参阅
%{
%}something
...
%}
^.*%\{(?:\n(?!.*%\{).*)*\n\s*%\}$
^.*%\{(?:\R(?!.*%\{).*)*\R\h*%\}$