我需要提取括號之間的表達式,其中可以包含所有內容但不包含非轉義的閉括號。排除範圍內的轉義字符
例如,來自[aaa\]bbbbbb]
的正則表達式應給出結果:aaa\]bbbbbb
。
我試過這個:\[([^(?<!\\)\]]*)\]
但是失敗了。
任何提示?
我需要提取括號之間的表達式,其中可以包含所有內容但不包含非轉義的閉括號。排除範圍內的轉義字符
例如,來自[aaa\]bbbbbb]
的正則表達式應給出結果:aaa\]bbbbbb
。
我試過這個:\[([^(?<!\\)\]]*)\]
但是失敗了。
任何提示?
您可以使用
\[([^\]\[\\]*(?:\\.[^\]\[\\]*)*)]
或者 - 如果有可能是任何非轉義[
在兩者之間非轉義[
和]
(如[a[\[aa\]bbbbbba\[aabbbbbb]
),取出\[
:
\[([^\]\\]*(?:\\.[^\]\\]*)*)]
查看regex demo 1和regex demo 2。它是\[((?:[^][\\]|\\.)*)]
正則表達式的unrolled variant。
詳細:
\[
- 一個[
([^\]\[\\]*(?:\\.[^\]\[\\]*)*)
- 第1個捕獲:
[^\]\[\\]*
- 零個或多個字符比[
,]
和\
其他(在一些正則表達式的口味,你可以寫出它沒有逃脫 - [^][\\]*
)(?:\\.[^\]\[\\]*)*
的零個或更多序列:
\\.
- 任何轉義序列(\
和比換行符字符以外的任何字符[^\]\[\\]*
- 比[
零個或多個字符其他,]
和\
]
- 閉幕]
。
太棒了,謝謝!我會花一些時間來理解工具頁面的解釋:) – sssimon