我有以下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+]?)">
,并且没有匹配。请告诉我哪里出错了以及如何解决这个问题。
由于
答案 0 :(得分:2)
在你的模式中:
([0-9]+[\w+]?)
[0-9]+
匹配0到9范围内的单个字符,尽可能多次[\w+]?
匹配来自+
和[A-Za-z0-9_]
字符集的单个字符,零和一次。由于此模式永远不会匹配单词App
;你的正则表达式失败了。
您可以使用以下模式:
(\w+)/(\w+)/(\w+)/(\w+)
由于\w
已包含[0-9]
类。