我发现了 Ruby 编程语言的《Programming 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]" 的内容,但递归的行为并不像我预期的那样。它无法匹配嵌套的大括号表达式,例如 "{[]}"。我错过了什么吗?