我有这个字符串 ($str) : 67-89-90T
,我想保留67-89
.
当然substring-before($str,'-')
return 67
,但我该如何选择第二个破折号?
XPath 2 解决方案是:
replace("67-89-90T", "(.*)-[^-]*$", "$1")
(也可以,如果没有 -,那么它不匹配并且什么都不替换)
使用标记化的 XPath 2.0 解决方案可能比使用 RegEx 更易读和易懂:
string-join(tokenize(concat($vStr,'-'), '-')
[.][not(position() eq last())],
'-')
当使用 XQuery 处理器或 XPath 2.0 处理器运行时,表达式:
string-join(tokenize(concat('-', '67-89-90T','-'), '-')
[.][not(position() eq last())],
'-')
产生想要的正确结果:
67-89
好的,我终于找到了functx:substring-before-last
。不选择特定的破折号,但在这种情况下对我有用。
http://www.xqueryfunctions.com/xq/functx_substring-before-last.html