【发布时间】:2010-09-16 01:53:42
【问题描述】:
.NET balanced group regexes 让我的脑袋爆炸。我有这个要匹配的字符串:
other stuff blah blah....
{
stuff stuff
{key:
stuff
stuff
}
} more stuff.....
这是我的正则表达式:
[^{}]* # anything that isn't { }
\{ # starting with {
(?> # atomic group: throw away backtracks on exit
[^{}]+
|
\{(?:\w+:)?(?<DEPTH>) # on matching { plus optional "word:" push stack
|
\}(?<-DEPTH>) # on matching } pop stack
)*
(?(DEPTH)(?!)) # if depth unbalanced, fail match
\} # ending with }
[^{}]* # anything that isn't { }
所以,我正在尝试匹配平衡花括号,其中一些左花括号有一个可选单词,后跟一个冒号。上面的正则表达式匹配我的示例字符串,但如果我删除一个花括号,(即“不平衡它):
other stuff blah blah....
{
stuff stuff
{key:
stuff
stuff
} more stuff.....
...它仍然匹配!
谁能告诉我如何修复我的正则表达式?
【问题讨论】:
-
我冒昧地评论了你的正则表达式;只需使用
RegexOptions.IgnoreWhitespace调用它。这对避免爆头综合症非常有帮助:) -
@Jeff:您可以将
IgnoreWhitespace的规则构建到(?x) # IgnorePatternWhitespace的模式中。有关示例,请参见 stackoverflow.com/questions/1961369/…。