使用Regex和Pushdown-Automata匹配嵌套括号组

我正在研究ac#正则表达式,它可以匹配嵌套结构(本例中为圆括号)以及任意运算符(在本例中为“|”字符)。

我已经开始使用这里描述的下推自动机。

到目前为止我所拥有的:

String pattern = @" (?# line 01) \( (?# line 02) (?> (?# line 03) \( (?) (?# line 04) | (?# line 05) \) (?) (?# line 06) | (?# line 07) .? (?# line 08) )* (?# line 09) (?(DEPTH)(?!)) (?# line 10) \) "; var source = "((Name1| Name2) Blah) | (Name3 ( Blah | Blah))"; var matches = Regex.Matches(source, pattern, RegexOptions.IgnorePatternWhitespace); matches.Dump(); 

得到以下结果:

 // ((Name1| Name2) Blah) // (Name3 ( Blah | Blah)) 

期望的结果:

 // ((Name1| Name2) Blah) // | // (Name3 ( Blah | Blah)) 

注意:组之间可能有也可能没有任何运算符。 例如,源可能看起来像“((Name1 | Name2)Blah)(Name3(Blah | Blah))”

你可以试试这个:(最后添加|\|

 \((?>\((?)|\)(?<-DEPTH>)|.?)*(?(DEPTH)(?!))\)|\|