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>%>