У меня есть эта строка ($str): 67-89-90T
, и я хочу сохранить 67-89
.
Конечно, substring-before($str,'-')
возвращает 67
, но как мне выбрать 2-й тире?
У меня есть эта строка ($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
tokenize()
, как в этом случае, второй переданный аргумент - это просто строка. - person Dimitre Novatchev   schedule 25.12.2012