我需要提取括号之间的表达式,其中可以包含所有内容但不包含非转义的闭括号。排除范围内的转义字符
例如,来自[aaa\]bbbbbb]
的正则表达式应给出结果:aaa\]bbbbbb
。
我试过这个:\[([^(?<!\\)\]]*)\]
但是失败了。
任何提示?
我需要提取括号之间的表达式,其中可以包含所有内容但不包含非转义的闭括号。排除范围内的转义字符
例如,来自[aaa\]bbbbbb]
的正则表达式应给出结果:aaa\]bbbbbb
。
我试过这个:\[([^(?<!\\)\]]*)\]
但是失败了。
任何提示?
您可以使用
\[([^\]\[\\]*(?:\\.[^\]\[\\]*)*)]
或者 - 如果有可能是任何非转义[
在两者之间非转义[
和]
(如[a[\[aa\]bbbbbba\[aabbbbbb]
),取出\[
:
\[([^\]\\]*(?:\\.[^\]\\]*)*)]
查看regex demo 1和regex demo 2。它是\[((?:[^][\\]|\\.)*)]
正则表达式的unrolled variant。
详细:
\[
- 一个[
([^\]\[\\]*(?:\\.[^\]\[\\]*)*)
- 第1个捕获:
[^\]\[\\]*
- 零个或多个字符比[
,]
和\
其他(在一些正则表达式的口味,你可以写出它没有逃脱 - [^][\\]*
)(?:\\.[^\]\[\\]*)*
的零个或更多序列:
\\.
- 任何转义序列(\
和比换行符字符以外的任何字符[^\]\[\\]*
- 比[
零个或多个字符其他,]
和\
]
- 闭幕]
。
太棒了,谢谢!我会花一些时间来理解工具页面的解释:) – sssimon