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')

Veja também