matches
Se uma string casa com uma expressão regular
Descrição
A função fn:matches diz se uma string casa com 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 é a expressão regular. Ao contrário de muitas funções de string, fn:matches não usa collations: a comparação é feita só pelos code points Unicode. A menos que se usem as âncoras "^" ou "$", a função devolve true se qualquer trecho de $input casar com a expressão.
Parâmetros |
Descrição |
|---|---|
input:string() |
a string a testar |
pattern:string() |
a expressão regular a procurar |
flags:string() |
flags que controlam o modo multilinha, a diferença entre maiúsculas e minúsculas etc. |
Exemplos
Os exemplos abaixo usam este documento de entrada:
<xsl:variable name="address" as="xs:string">123 Main Street
Traverse City, MI 49684</xsl:variable>
XPath |
Resultado |
Explicação |
|---|---|---|
matches('query', 'q') |
true |
q aparece na string. |
matches('query', 'ue') |
true |
ue aparece na string. |
matches('query', '^qu') |
true |
^ prende o padrão no início. |
matches('query', 'qu$') |
false |
$ prende o padrão no fim, e a string termina com ry. |
matches('query', '[ux]') |
true |
A string contém u. |
matches('query', 'q.*') |
true |
q seguido de quaisquer caracteres. |
matches('query', '[a-z]{5}') |
true |
Cinco letras minúsculas seguidas. |
matches((), 'q' ) |
false |
A sequência vazia é tratada como uma string vazia, que não contém q. |
matches('query', '[qu') |
Error FORX0002 |
[qu não é uma expressão regular válida: o colchete não foi fechado. |
matches($address, 'Street.*City') |
false |
Sem o flag s, o . não casa com a quebra de linha. |
matches($address, 'Street.*City', 's') |
true |
Com o flag s (dot-all), o . também casa com a quebra de linha. |
matches($address, 'Street$') |
false |
Sem o flag m, o $ só casa no fim da string inteira. |
matches($address, 'Street$', 'm') |
true |
Com o flag m (multilinha), o $ também casa no fim de cada linha. |
matches($address, 'street') |
false |
A comparação diferencia maiúsculas de minúsculas. |
matches($address, 'street', 'i') |
true |
O flag i ignora maiúsculas e minúsculas. |
matches($address, 'Main Street') |
true |
O texto contém Main Street. |
matches($address, 'Main Street', 'x') |
false |
Com o flag x, os espaços do padrão são ignorados, então ele procura MainStreet. |
matches($address, 'Main \s Street', 'x') |
true |
Com o flag x, é preciso \s para casar com o espaço. |
matches($address, 'street$', 'im') |
true |
O i ignora maiúsculas e minúsculas, e o m deixa o $ casar no fim da primeira linha. |
matches($address, 'Street$', 'q') |
false |
Desde o XPath 3.0 o flag q é válido: o padrão é lido como texto literal, então $ não é o fim da linha. No XPath 2.0 dava o erro FORX0001. |