如何使用Regex解析嵌套块?

时间:2011-08-22 17:55:08

标签: .net regex nested

  

可能重复:
  RegEx match open tags except XHTML self-contained tags
  .NET Regex balancing groups expression - matching when not balanced

例如,如果我有输入:

[quote]He said:
    [quote]I have no idea![/quote]
But I disagree![/quote]

And another quote:

[quote]Some other quote here.[/quote]

如何使用正则表达式有效地抓取引号块而不会占用太多或太少?例如,如果我使用:

\[Quote\](.+)\[/Quote\]

这会占用太多(基本上,整个事情),而这个:

\[Quote\](.+?)\[/Quote\]

会抓得太少(它只会抓住[quote]He said:[quote]I have no idea![/quote],不匹配的开始/结束括号。)

那么如何使用Regex有效地解析嵌套的代码块?

2 个答案:

答案 0 :(得分:0)

正则表达式和嵌套不能很好地工作。有可能(但是,取决于你正在使用的正则表达式,可能非常麻烦)构造一个只匹配最里面的对的正则表达式。但是,如果要将整个引用与嵌套引号匹配,那么正则表达式就不是一个足够强大的工具。您需要研究无上下文解析器技术,或者在匹配外部引用之前进行连续替换以将嵌套引号重写为其他内容。

答案 1 :(得分:0)

查看我的xml indenter,它使用组将开始标记与最后一个标记匹配,然后使用另一个组来递归获取内容。