我有这个字符串(实际上是无限的):
[e00-100;e01-90;e02-0;e03-0;...;]
现在,我想要这个结果:
e00-100
e01-90
e02-0
...
字符串总是以 ;] 结尾
如何使用正则表达式(使用 function <xsl:analyze-string select="$string" regex="...">
<xsl:matching-substring>...
)执行此操作?
非常感谢您的帮助!
如果您使用<xsl:value-of select="tokenize(replace(replace($string, '^\[', ''), ';\]$', ''), ';')" separator=" "/>
它应该足以在自己的一行上输出每个令牌。
如果您想按照评论中的指示包装令牌,那么您可以使用
<xsl:for-each select="tokenize(replace(replace($string, '^\[', ''), ';\]$', ''), ';')">
<val><xsl:value-of select="."/></val>
</xsl:for-each>
或分析字符串,例如
<xsl:analyze-string select="$string" regex="(e[0-9]+-[0-9]+);">
<xsl:matching-substring>
<val><xsl:value-of select="regex-group(1)"/></val>
</xsl:matching-substring>
</xsl:analyze-string>
这是一个完整的例子:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output indent="yes"/>
<xsl:param name="string" select="'[e00-100;e01-90;e02-0;e03-0;]'"/>
<xsl:template name="main">
<results>
<result-tokenize>
<xsl:for-each select="tokenize(replace(replace($string, '^\[', ''), ';\]$', ''), ';')">
<val><xsl:value-of select="."/></val>
</xsl:for-each>
</result-tokenize>
<result-as>
<xsl:analyze-string select="$string" regex="(e[0-9]+-[0-9]+);">
<xsl:matching-substring>
<val><xsl:value-of select="regex-group(1)"/></val>
</xsl:matching-substring>
</xsl:analyze-string>
</result-as>
</results>
</xsl:template>
</xsl:stylesheet>
输出(用 Saxon 9.5 HE 测试)是
<results>
<result-tokenize>
<val>e00-100</val>
<val>e01-90</val>
<val>e02-0</val>
<val>e03-0</val>
</result-tokenize>
<result-as>
<val>e00-100</val>
<val>e01-90</val>
<val>e02-0</val>
<val>e03-0</val>
</result-as>
</results>