匹配XSLT正则表达式模式

时间:2014-07-02 10:12:05

标签: regex xslt

我有以下XML字符串

<para><content-style font-style="bold">59/App/1/1 Amendment—</content-style>
</para>

以及下面的正则表达式匹配。

 <xsl:template match="para[fn:not(@align)]/content-style[1]/text()">
    <xsl:choose>
                    <xsl:when test="fn:not(contains(substring-before(.,'/'),' '))">

 <xsl:analyze-string select="." regex="([0-9]+[\w+]?)/([0-9]+[\w+]?)/([0-9]+[\w+]?)/([0-9]+[\w+]?)">
            <xsl:matching-substring>
                <span class="phrase">
                    <a name="{concat('P',regex-group(1),'-',regex-group(2),'-',regex-group(3),regex-group(4))}"/>
                    <xsl:value-of select="."></xsl:value-of>
                </span>
            </xsl:matching-substring>
            <xsl:non-matching-substring>                

        <xsl:analyze-string select="." regex="([0-9]+[\w+]?)/([0-9]+[\w+]?)/([0-9]+[\w+]?)">
            <xsl:matching-substring>
                <span class="phrase">
                    <a name="{concat('P',regex-group(1),'-',regex-group(2),'-',regex-group(3))}"/>
                    <xsl:value-of select="."></xsl:value-of>
                </span>
            </xsl:matching-substring>
            <xsl:non-matching-substring>
                <xsl:analyze-string select="." regex="([0-9]+[\w+]?)/([0-9]+[\w+]?)">
                    <xsl:matching-substring>
                        <span class="phrase">
                            <a name="{concat('P',regex-group(1),'-',regex-group(2))}"/>
                            <xsl:value-of select="."></xsl:value-of>
                        </span>
                    </xsl:matching-substring>
                    <xsl:non-matching-substring>
                        <xsl:value-of select="."></xsl:value-of>
                    </xsl:non-matching-substring>
                </xsl:analyze-string>
            </xsl:non-matching-substring>
        </xsl:analyze-string>
       </xsl:non-matching-substring>
       </xsl:analyze-string>
            </xsl:when>
                    <xsl:otherwise>
<xsl:value-of select="."/>                  
                    </xsl:otherwise>
                </xsl:choose>
    </xsl:template>

这里我想将59/App/1/1与正则表达式匹配,但我无法理解如何做到这一点。 我尝试analyze-string使用<xsl:analyze-string select="." regex="([0-9]+[\w+]?)/([0-9]+[\w+]?)/([0-9]+[\w+]?)/([0-9]+[\w+]?)">,并且没有匹配。请告诉我哪里出错了以及如何解决这个问题。

由于

1 个答案:

答案 0 :(得分:2)

在你的模式中:

([0-9]+[\w+]?)
  • [0-9]+匹配0到9范围内的单个字符,尽可能多次
  • [\w+]?匹配来自+[A-Za-z0-9_]字符集的单个字符,零和一次。

由于此模式永远不会匹配单词App;你的正则表达式失败了。

您可以使用以下模式:

(\w+)/(\w+)/(\w+)/(\w+)

由于\w已包含[0-9]类。