XQuery:substring-before / after特定char多次出现?

时间:2012-12-24 21:51:59

标签: xquery xpath-2.0

我有这个字符串($ str):67-89-90T,我想保留67-89

当然substring-before($str,'-')会返回67,但我该如何选择第二个破折号?

3 个答案:

答案 0 :(得分:2)

XPath 2解决方案将是:

replace("67-89-90T", "(.*)-[^-]*$", "$1")

(也有效,如果没有 - ,从那时起它不匹配并且不替换任何东西)

答案 1 :(得分: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

答案 2 :(得分:0)

好的,我终于找到了functx:substring-before-last。在这种情况下,不会选择特定的破折号但对我有用。

http://www.xqueryfunctions.com/xq/functx_substring-before-last.html