2015-11-23 3 views
1

Я пытаюсь извлечь дату из строки с помощью XQuery.Извлечь строку, соответствующую регулярному выражению из строки

let $string := "This string has a yymmdd date like 151123 in it." 
(: I need the date bit -> 151123 :) 
let $regex := "[0-9]{2}[0-1][0-9][0-3][0-9]" 

Использование replace() и tokenize() я могу получить все, кроме совпавшей строки. Функция functx:get-matches() выглядит так, как будто это может сделать трюк, но я не могу ее использовать.

ответ

1

Вы должны соответствовать всей строке, группа даты и заменить группы:

fn:replace($string, "^.*([0-9]{2}[0-1][0-9][0-3][0-9]).*$", "$1") 

Я не в состоянии проверить код, но, надеюсь, вы получите общий процесс.

3

XQuery 3,0 имеет замечательную analyze-string() функции:

xquery version "3.0"; 

let $string := "This string has a yymmdd date like 151123 in it." 
(: I need the date bit -> 151123 :) 
let $regex := "[0-9]{2}[0-1][0-9][0-3][0-9]" 
return 
    analyze-string($string, $regex) 

возвращения:

<fn:analyze-string-result xmlns:fn="http://www.w3.org/2005/xpath-functions"> 
    <fn:non-match>This string has a yymmdd date like </fn:non-match> 
    <fn:match>151123</fn:match> 
    <fn:non-match> in it.</fn:non-match> 
</fn:analyze-string-result> 

Таким образом, чтобы получить соответствующую строку, вы можете просто запросить analyze-string($string, $regex)//fn:match.

Смежные вопросы