.net 如何使用正则表达式解析嵌套块?

.net 如何使用正则表达式解析嵌套块?,.net,regex,nested,.net,Regex,Nested,可能的重复项: 例如,如果我有输入: [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],开头/结尾括号不匹

可能的重复项:

例如,如果我有输入:

[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]
,开头/结尾括号不匹配)


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

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

看看my,它使用组将开始标记匹配到最后一个标记,并使用另一组递归地获取内容。

,嵌套模式不是规则的,因此它们不能由正则表达式处理。当然,大多数现代regex实现都可以适应不规则模式,但使用它们仍然很痛苦。此外,我看到的是BBCode吗?请看:这不是BBcode,我只是将其用作一个高级示例。我正在创建的实现是定制的,看起来不太像BBcode(尽管这个概念是相同的,因此,为了简单起见,我为什么使用它)。使用或编写解析器。请看:我会选择一个合适的解析器,但如果你必须使用正则表达式,请看:我讨厌成为那个家伙,但我真的看不懂。我熟悉C风格的语言。我在代码中添加了一些注释,希望能有所帮助
\[Quote\](.+?)\[/Quote\]