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

ここでは、番号付きの後方参照ではなく、名前付き後方参照を使用しています。名前付きグループを使用している場合は、名前付き後方参照を使用することを常にお勧めしますが、.NET では必須です。.NET では、最初のグループだからといって同じものには一致しません。\k<begintag>\1\1(?<begintag>[^>]+)

また、Singleline モード(?s)を使用して、ドットを(.+?)改行と一致させました。

于 2012-04-30T18:38:25.203 に答える
0

正規表現の後方参照(以下)を使用してみることができます\1

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