角かっこ内で一部のタグを使用できるユーザー入力があります。括弧内にあるものを見つけて検証するための正規表現パターンを既に作成しました。
ユーザー入力フィールドでは、開始ブラケット ([) をバックスラッシュでエスケープできます。また、バックスラッシュを別のバックスラッシュ (\) でエスケープできます。開き括弧の前に奇数個の連続するバックスラッシュを避けるために、後読みサブパターンが必要です。
現時点では、次のようなことに対処する必要があります。
(?<!\\)(?:\\\\)*\[(?<inside brackets>.*?)]
正常に動作しますが、問題は、このコードがまだブラケットの前にある連続するバックスラッシュの可能なペアに一致し (それらが隠されている場合でも)、ペアに追加された別の単一のバックスラッシュがあるかどうか (または開始ブラケットに直接) をチェックアウトすることです。 . 可能であれば、後読みグループ内でそれらをすべて回避する必要があります。
例:
my [test] string is ok
my \[test] string is wrong
my \\[test] string is ok
my \\\[test] string is wrong
my \\\\[test] string is ok
my \\\\\[test] string is wrong
...
etc
私はPHP PCREを使用しています