正如我从 XSLT 2.0 文档中看到的那样,或者至少从我在这些地方读到的内容中可以看出:
使用正则表达式从某些输入中提取特定组的唯一方法是使用analyze-string()。相比之下,replace() 函数非常简洁,那么是否有同样简洁的提取方法呢?
例如,给定输入:“ABCD:123,DEFGH”,我想仅提取“123”并将其存储在变量中。请注意,输入可能更复杂,因此我确实想利用正则表达式和分组。
tokenize()
不是答案,IMO,因为它似乎更适合输入具有重复分隔符的情况。
我正在寻找一个像 replace()
一样简洁的函数,并且可能像这样工作:
<xsl:variable name="num" select="extract('.', '(.+):\s*(\d+), (.+)', '$2')"/>
但我找不到。看来我必须像下面那样使用analyze-string(),但它太长了:
<xsl:variable name="num">
<xsl:analyze-string select="." regex="(.+):\s*(\d+), (.+)">
<xsl:matching-substring>
<xsl:value-of select="regex-group(2)"/>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:variable>
实际上有必要使用analyze-string()
还是我遗漏了什么?
最佳答案
replace()
正是您正在寻找的。 matches()
是用于比较的函数,replace()
用于提取。如果您在示例中用 replace
替换 extract
,它就可以正常工作
XSLT 转换不会更改您的输入。它将您的输入转换为输出。您的输入将完好无损。
关于xml - XSLT 2.0 中的简洁正则表达式提取功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39401716/