我需要在括号之间提取一个表达式,它可以包含所有内容,但不包括非转义的闭括号。
例如,来自[aaa\]bbbbbb]
的正则表达式应该给出结果:aaa\]bbbbbb
。
我试过这个:\[([^(?<!\\)\]]*)\]
但是失败了。
任何提示?
答案 0 :(得分:1)
您可以使用
\[([^\]\[\\]*(?:\\.[^\]\[\\]*)*)]
或者 - 如果在非转义的[
和[
之间可能存在任何未转义的]
(例如[a[\[aa\]bbbbbba\[aabbbbbb]
),请取出{{1 }}:
\[
请参阅regex demo 1和regex demo 2。它是unrolled variant正则表达式的\[((?:[^][\\]|\\.)*)]
。
<强>详情:
\[([^\]\\]*(?:\\.[^\]\\]*)*)]
- \[
[
- 第1组捕获:
([^\]\[\\]*(?:\\.[^\]\[\\]*)*)
- 除了[^\]\[\\]*
,[
和]
之外的零个或多个字符(在一些正则表达式中,您可以编写它而不会逃脱 - \
)[^][\\]*
- 零个或多个序列:
(?:\\.[^\]\[\\]*)*
- 任何转义序列(\\.
以及换行符以外的任何字符\
- 除[^\]\[\\]*
,[
和]
\
- 结束]
。答案 1 :(得分:0)