gpt4 book ai didi

ruby - Ruby 中的平衡大括号/方括号/parens 正则表达式

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

我在 Pickaxe Ruby 书中发现了一个正则表达式,用于查找平衡的大括号表达式,我正试图在它的基础上构建一个匹配平衡大括号/方括号/圆括号的正则表达式。

原文:

re = /
\A
(?<brace_expression>
{
(
[^{}] # anything other than braces
| # ...or...
\g<brace_expression> # a nested brace expression
)*
}
)
\Z
/x

到目前为止我的版本:

re = /
\A
(?<brace_expression>
(?:
(?<brace> { ) | (?<bracket> \[ ) | ( \( )
)
(
[^{}\[\]()] # anything other than braces
| # ...or...
\g<brace_expression> # a nested brace expression
)*
(?(<brace>) } | (?(<bracket>) \] | \) ) )
)
\Z
/x

它正确匹配“{xyz}”、“[xyz]”、“(xyz)”,但正确地无法匹配“{xyz]”之类的东西,但递归的行为并不像我预期的那样。它无法匹配嵌套的大括号表达式,如“{[]}”。我错过了什么?

最佳答案

有趣的问题。您当前的模式看起来相当不错。与递归一起使用时,使用交替而不是条件似乎不可靠。

re = /
\A( # start group 1
\(([^)(\]\[}{]+|\g<1>)*+\)| # parens & set group 2
\[\g<2>*+\]| # brackets
\{\g<2>*+\} # braces
)\z # group 1 end
/x

See demo at Regex101 (PCRE)Rubular v1.9.3+

关于ruby - Ruby 中的平衡大括号/方括号/parens 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36086082/

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