[英]Balanced braces/brackets/parens regex in Ruby
我在pickaxe Ruby書中找到了一個用於尋找平衡括號表達式的正則表達式,我正試圖在它上面建立一個匹配平衡括號/括號/ parens的正則表達式。
原本的:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.