我是一个 XSLT 新手,想用正则表达式来匹配这个模式。
“字符串 1-数字-字符串 2”
我需要在第二个连字符之前捕获子字符串。
感谢你的帮助。
谢谢
您可以使用replace()
正则表达式^([^-]+-[^-]+).*
。
例子...
XML
<test>String1-number-String2</test>
XSLT 2.0
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<results>
<xsl:value-of select="replace(.,'^([^-]+-[^-]+).*','$1')"/>
</results>
</xsl:template>
</xsl:stylesheet>
输出
<results>String1-number</results>
这是适用于“String1-number-String2”示例的 XPath 1.0/2.0 字符串函数解决方案(不是正则表达式):
<xsl:value-of select="substring-before(substring-after('String1-number-String2','-'), '-')"/>
- -编辑 - -
我好像误会了。该字符串函数将返回'number',而不是'String1-number'。
这是一个返回“String1-number”的 XPath 2.0 解决方案:
<xsl:variable name="substrings" select="tokenize('String1-number-String2','-')"/>
<xsl:value-of select="concat($substrings[1], '-', $substrings[2])"/>
您可以使用例如替换功能:
<!-- this will return "number" -->
<xsl:value-of select="replace('String1-number-String2', '(.*)-(.*)-(.*)', '$2')" />
<!-- this will return "String1-number" -->
<xsl:value-of select="replace('String1-number-String2', '(.*)-(.*)-(.*)', '$1-$2')" />
<xsl:value-of select="replace('String1-number-String2', '(.*-.*)-(.*)', '$1')" />