Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用正则表达式平衡组匹配嵌套标记_C#_Regex_Balancing Groups - Fatal编程技术网

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.