1

我有这个正则表达式:

<%(?<begintag>[^>]+)%>(?<inner>(.+?))<%/(?<endtag>[^%]+)%>

我想要实现的是,检查begintagendtag是否相等。
考虑这个输入:

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

有什么办法可以检查吗?

提前致谢。

4

2 回答 2

3

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

(?s)<%(?<begintag>[^>]+)%>(.+?)<%/\k<begintag>%>

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

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

于 2012-04-30T18:38:25.203 回答
0

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

<%(?<begintag>[^>]+)%>(?<inner>(.+?))<%/\1%>
于 2012-04-30T16:34:49.813 回答