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+ 个空格
%\}
- %}
子串
$
- 行尾。
我尝试编写一个匹配此模式的正则表达式:
%{
...
...
%}
它还应该匹配:
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+ 个空格%\}
-%}
子串$
- 行尾。