tokenize
Divide uma string por uma expressão regular
Descrição
A função fn:tokenize divide uma string usando uma expressão regular. A sintaxe das expressões regulares é a do XML Schema, com algumas mudanças e acréscimos do XPath/XSLT 2.0. O argumento $pattern é uma expressão regular que representa o separador. Os padrões mais simples podem ser um espaço ou uma string com o caractere separador, como ,. Mas alguns caracteres precisam ser escapados em expressões regulares: .?*+|^${}()[].
Os separadores não entram nas strings do resultado. Se houver dois separadores seguidos, entra uma string vazia no resultado. Se a string começar com o separador, o primeiro valor é uma string vazia. Do mesmo jeito, se terminar com o separador, o último valor é uma string vazia.
O parâmetro $flags dá opções a mais na interpretação da expressão regular.
Se um ponto da string puder casar com mais de uma alternativa, vale a primeira. É o que mostra o último exemplo abaixo, em que a função considera a vírgula como separador, embora "vírgula seguida de asterisco" também sirva.
Parâmetros |
Descrição |
|---|---|
input:string() |
a string a dividir |
pattern:string() |
a expressão regular que casa com os separadores |
flags:string() |
flags que controlam o modo multilinha, a diferença entre maiúsculas e minúsculas etc. |
Exemplos
XPath |
Resultado |
|---|---|
tokenize('a b c', '\s') |
('a', 'b', 'c') |
tokenize('a b c', '\s') |
('a', '', '', 'b', 'c') |
tokenize('a b c', '\s+') |
('a', 'b', 'c') |
tokenize(' b c', '\s') |
('', 'b', 'c') |
tokenize('a,b,c', ',') |
('a', 'b', 'c') |
tokenize('a,b,,c', ',') |
('a', 'b', '', 'c') |
tokenize('a, b, c', '[,\s]+') |
('a', 'b', 'c') |
tokenize('2006-12-25T12:15:00', '[\-T:]') |
('2006', '12', '25', '12', '15', '00') |
tokenize('Hello, there.', '\W+') |
('Hello', 'there', '') |
tokenize((), '\s+') |
() |
tokenize('abc', '\s') |
abc |
tokenize('abcd', 'b?') |
Error FORX0003 |
tokenize('a,xb,xc', ',|,x') |
('a', 'xb', 'xc') |