gpt4 book ai didi

ruby - 使用递归正则表达式(如 perl)在 Ruby 中匹配平衡括号

转载 作者:数据小太阳 更新时间:2023-10-29 06:39:10 25 4
gpt4 key购买 nike

我一直在寻找一种方法来匹配正则表达式中的平衡括号,并在 Perl 中找到了一种使用递归正则表达式的方法:

my $re;
$re = qr{
\(
(?:
(?> [^()]+ ) # Non-parens without backtracking
|
(??{ $re }) # Group with matching parens
)*
\)
}x;

来自 perl regular expression site.

有没有办法用 Ruby 或类似的语言做到这一点?

更新:

对于那些感兴趣的人,这里有一些有趣的链接:

Oniguruma manual - 来自 Sawa 的回答。

Pragmatic Programmers' Ruby 1.9 Regular Expressions Sample Chapter

最佳答案

是的。用oniguruma正则表达式引擎内置于 Ruby 1.9 中,可安装在 Ruby 1.8 上,您可以这样做。你用 (?<name>...) 命名一个子正则表达式或 (?'name'...) .然后你用 \g<name> 调用一个子正则表达式或 \g'name'在同一个正则表达式中。所以你的正则表达式翻译成 oniguruma 正则表达式将是:

re = %r{
(?<re>
\(
(?:
(?> [^()]+ )
|
\g<re>
)*
\)
)
}x

另请注意,PHP >=5 中的多字节字符串模块使用 oniguruma 正则表达式引擎,因此您也可以这样做。

oniguruma 的手册是 here .

关于ruby - 使用递归正则表达式(如 perl)在 Ruby 中匹配平衡括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6331065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com