C# 使用正则表达式平衡组匹配嵌套标记
我正在尝试使用正则表达式平衡组来匹配嵌套标记,如下所示:C# 使用正则表达式平衡组匹配嵌套标记,c#,regex,balancing-groups,C#,Regex,Balancing Groups,我正在尝试使用正则表达式平衡组来匹配嵌套标记,如下所示: some text ... {list} nesting loop content {list} {list} {list} bala ... {/list} {/list} {/list} {/list} end 我的表情: \{(?<NAME>.+?)\} [^\{\}]*
some text ...
{list}
nesting loop content
{list}
{list}
{list}
bala ...
{/list}
{/list}
{/list}
{/list}
end
我的表情:
\{(?<NAME>.+?)\}
[^\{\}]*
(
(
\{(?<NAME2>.+?)\}(?<OPEN>)
[^\{\}]*?
)
(
\{\/\<NAME2>\}(?<-OPEN>)
[^\{\}]*?
)
)*
(?(OPEN)(?!))
\{\/\<NAME>\}
通常,要匹配嵌套标记,您需要类似于:
(?>
\{(?\w+\}
|
\{/(?\)\}
|
(?(开放)[^{}]+)
)*
(?(开放)(?!))
通过这种方式,您可以匹配不同类型的嵌套标记,这看起来就像您正在尝试做的。例如,它将与此匹配:
{list}
嵌套循环内容
{world}
{list}
{你好}
巴拉。。。
{/你好}
{/list}
{/世界}
{/list}
注:
- 我使用的是
,所以我们只匹配标签中的自由文本(?(Open)[^{}]+)
- 我在顶层和内层使用同一组
你的很接近。您基本上缺少中间组之间的一个备选方案:
(
\{(?.+?)\}(?)
[^\{\}]*?
)
|#使用html/xml解析器。
only last 2 level pair can match.