【发布时间】:2016-03-18 13:46:52
【问题描述】:
我在 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]”之类的内容,但递归的行为与我预期的不同。它无法匹配像“{[]}”这样的嵌套大括号表达式。我错过了什么?
【问题讨论】: