1

次のxmlの例があります:

<test>
<p>Some text (page 24)</p>
<p>Some text  (Page 24)</p>
<p>there is some text here (page 24) and here (page 25)</p>
<p>some text (pages 24, 7, 9)</p>
</test>

そして、正規表現を使用してすべてのページ テキスト スニペットを page_ref タグにラップしたいので、結果は次のようになります。

<test>
<p>Some text <page_ref>(page 24)</page_ref></p>
<p>Some text <page_ref>(Page 24)</page_ref></p>
<p>there is some text here <page_ref>(page 24)</page_ref> and here <page_ref>(page 25)</page_ref></p>
<p>some text <page_ref>(pages 24, 7, 9)</page_ref></p>
</test>

私のコードは次のようになります

<xsl:template match="text()">
    <xsl:analyze-string select="." regex="\(([pP]age).*\)">
        <xsl:matching-substring>
            <page_ref><xsl:value-of select="."/></page_ref>
        </xsl:matching-substring>
        <xsl:non-matching-substring>
            <xsl:value-of select="."/>
        </xsl:non-matching-substring>
    </xsl:analyze-string>
</xsl:template>

しかし、生成されるため、3d p タグでは失敗します

<p>there is some text here <page_ref>(page 24) and here (page 25)</page_ref></p>

だから誰かが私にエラーを指摘することができれば、私は幸せな男になる. 前もって感謝します !

4

2 に答える 2

1

次の)まで、)以外の任意の文字を一致させることができます。

"\(([pP]age)[^)]*\)"
于 2013-02-11T15:34:16.787 に答える
1

次の正規表現を試してください。

\(pages?\s+\d+(,\s*\d+)*\)

PS: これは .NET 正規表現を使用してテストされましたが、XSLT でも動作するはずです。

于 2013-02-11T15:32:50.000 に答える