Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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_Backreference - Fatal编程技术网

C# 使用正则表达式检查两个命名匹配组的相等性

C# 使用正则表达式检查两个命名匹配组的相等性,c#,regex,backreference,C#,Regex,Backreference,我有一个正则表达式: <%(?<begintag>[^>]+)%>(?<inner>(.+?))<%/(?<endtag>[^%]+)%> ]+)%>(.+?) 我想要实现的是,检查开始标记和结束标记是否相等 考虑这个输入: <%layout%> <%pagetitle="test"> <%products%> <div class="p

我有一个正则表达式:

<%(?<begintag>[^>]+)%>(?<inner>(.+?))<%/(?<endtag>[^%]+)%>
]+)%>(.+?)
我想要实现的是,检查开始标记结束标记是否相等
考虑这个输入:

<%layout%>
    <%pagetitle="test">
        <%products%>
            <div class="product">
                <img src="<%product-smallimage%>" class="thumbnail" alt="<%product-title%>"/>
                <a class="buy-link" href="<%product-url%>"><%product-title%></a>
            </div>
        <%/products%>

“class=”缩略图“alt=”“/>
有没有办法检查一下

提前感谢。

您可以尝试使用正则表达式(
\1
如下):

]+)%>(.+?)

正如Igor所说,您可以捕获开始标记的名称,然后使用反向引用来匹配同名的结束标记。不过,他的正则表达式有几个问题;这一个有效:

(?s)<%(?<begintag>[^>]+)%>(.+?)<%/\k<begintag>%>
(?s)]+)%>(.+?)
在这里,我使用了命名的反向引用-
\k
-而不是编号的反向引用-
\1
。如果使用命名组,使用命名的反向引用总是一个好主意,但在.NET中这是必不可少的。在.NET中,
\1
(?[^>]+)
不匹配,因为它是第一个组


我还使用了单线模式-
(?s)
-来允许点进入
(.+?)
匹配换行符。

警告-Regex不是一个可以用来正确解析HTML的工具。我知道。我不想解析HTML标记。我想实现一个基于模板的商店,可以使用不同的主题。我应该用适当的信息替换内部HTML。到底什么不起作用?你在C#str中逃过反斜杠了吗ing?我试着用这个来测试,但没用。我想艾伦回答了原因。
(?s)<%(?<begintag>[^>]+)%>(.+?)<%/\k<begintag>%>