私はこの文字列 ($str) : を持ってい67-89-90T
ます67-89
。
もちろん をsubstring-before($str,'-')
返します67
が、どうすれば 2 番目のダッシュを選択できますか?
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