エスケープされていない閉じた括弧ではなくすべてを含むことができる括弧の間の式を抽出する必要があります。範囲からエスケープされた文字を除外します
例えば、[aaa\]bbbbbb]
の正規表現は、結果としてaaa\]bbbbbb
を与える必要があります。
私はこれを試しました:\[([^(?<!\\)\]]*)\]
しかしそれは失敗します。
ヒント
エスケープされていない閉じた括弧ではなくすべてを含むことができる括弧の間の式を抽出する必要があります。範囲からエスケープされた文字を除外します
例えば、[aaa\]bbbbbb]
の正規表現は、結果としてaaa\]bbbbbb
を与える必要があります。
私はこれを試しました:\[([^(?<!\\)\]]*)\]
しかしそれは失敗します。
ヒント
あなたは使用することができます
\[([^\]\[\\]*(?:\\.[^\]\[\\]*)*)]
か - が存在する可能性がある場合、任意の非エスケープの間で-[
を、取り出し\[
(例えば[a[\[aa\]bbbbbba\[aabbbbbb]
)[
エスケープ非と]
:
\[([^\]\\]*(?:\\.[^\]\\]*)*)]
regex demo 1およびregex demo 2を参照してください。正規表現\[((?:[^][\\]|\\.)*)]
のunrolled variantです。
詳細:
\[
から[
([^\]\[\\]*(?:\\.[^\]\[\\]*)*)
- グループ1つの捕捉:
[^\]\[\\]*
から[
以外のゼロまたはそれ以上の文字、]
及び\
(いくつかの正規表現のフレーバーあなたはエスケープなしで書くことができます - [^][\\]*
)(?:\\.[^\]\[\\]*)*
- ゼロ以上の配列:
\\.
は -[
以外のゼロまたはそれ以上の文字、
]
と
\
- 任意の配列(
\
および改行文字
[^\]\[\\]*
以外の任意の文字をエスケープ ]
- 閉鎖]
。
恐縮です、ありがとう! – sssimon