我一直在寻找一种方法来匹配正则表达式中的平衡括号,并在Perl中找到了一种使用递归正则表达式的方法:
my $re;
$re = qr{
\(
(?:
(?> [^()]+ ) # Non-parens without backtracking
|
(??{ $re }) # Group with matching parens
)*
\)
}x;
Run Code Online (Sandbox Code Playgroud)
来自perl正则表达式网站 .
有没有办法在Ruby或类似语言中执行此操作?
更新:
对于那里感兴趣的人有一些有趣的链接:
Oniguruma手册 - 来自Sawa的回答.
saw*_*awa 20
是.使用oniguruma正则表达式引擎,它内置在Ruby 1.9中,可以在Ruby 1.8上安装,你可以做到这一点.用(?<name>...)or 命名subregex (?'name'...).然后调用一个subregex用\g<name>或\g'name'相同的正则表达式中.所以你的正则表达式转换为oniguruma正则表达式将是:
re = %r{
(?<re>
\(
(?:
(?> [^()]+ )
|
\g<re>
)*
\)
)
}x
Run Code Online (Sandbox Code Playgroud)
另请注意,PHP> = 5的多字节字符串模块使用oniguruma regex引擎,因此您将能够执行相同的操作.
oniguruma手册在这里.