【发布时间】:2018-04-29 00:57:43
【问题描述】:
- 编辑:我添加了一个指向实时正则表达式工具的链接以检查正则表达式的运行情况:https://regex101.com/r/906a6D/4
我有以下 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 \[ ]
被完全忽略,完全不匹配,甚至没有一个字符。
我需要在平衡括号时忽略这些转义括号,但仍匹配正则表达式并被捕获。
【问题讨论】:
标签: regex perl regex-lookarounds parentheses brackets