1

私はこの文字列 ($str) : を持ってい67-89-90Tます67-89

もちろん をsubstring-before($str,'-')返します67が、どうすれば 2 番目のダッシュを選択できますか?

4

3 に答える 3

2

XPath 2 ソリューションは次のようになります。

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

(-がない場合も機能します。その場合、一致せず、何も置き換えられないためです)

于 2012-12-24T22:37:59.347 に答える
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
于 2012-12-24T23:59:02.520 に答える
0

やっと見つけましfunctx:substring-before-lastた。特定のダッシュを選択しませんが、この場合は機能します。

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

于 2012-12-24T22:05:31.807 に答える