我有下面的XML字符串
<para><content-style font-style="bold">59/App/1/1 Amendment—</content-style>
</para>下面的regex匹配。
<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与regex匹配,但我无法理解如何做到这一点。我试图使用analyze-string使用<xsl:analyze-string select="." regex="([0-9]+[\w+]?)/([0-9]+[\w+]?)/([0-9]+[\w+]?)/([0-9]+[\w+]?)">,但是没有匹配。请让我知道我哪里出错了,以及如何解决这个问题。
谢谢
发布于 2014-07-02 10:19:47
在你的模式中:
([0-9]+[\w+]?)[0-9]+尽可能多次匹配0到9之间的单个字符。[\w+]?匹配+和[A-Za-z0-9_]字符集中的单个字符,0次和1次。因为这个模式永远不会匹配单词App,所以正则表达式失败了。
您可以使用以下模式:
(\w+)/(\w+)/(\w+)/(\w+)因为\w已经包含了[0-9]类。
https://stackoverflow.com/questions/24528452
复制相似问题