У меня есть следующее регулярное выражение perl
/(\[(?>[^\[\]]+|(?1))*\])/sg
Это прекрасно работает и полностью соответствует всем этим строкам
[a ]
[ a]
[a [b
]]
[code sub t{
my ($o,$k) = @_;
my $c = 0;
my $r;
for(split //,$t){
$r .= $_ unless(($c+($k-$o)) % $k);
[]
$c++
}
$r =~ s/[^a-z]//g;
return $r
}]
Однако мне нужно выйти за скобки. Если есть несбалансированные, это не сработает, поэтому я хотел бы избежать их как \]
или, может быть, как {{- ] -}}
.
Это должно соответствовать до последней] скобки.
[a \] ]
Это должно совпадать до последнего ]
.
[a \]\[ ]
Это тоже
[a \\ ]
Я также пытался использовать обходные утверждения (?>!)
, (?<=)
перед внешними скобками и с внутренними игнорируемыми скобками, но затем строки, подобные этой
[a \[ ]
Полностью игнорируются, абсолютно не имеют себе равных, даже один символ.
Мне нужно, чтобы эти экранированные скобки игнорировались при балансировке скобок, но все равно соответствовали регулярному выражению и были захвачены.