Como encontrar uma palavra dentro do texto usando o XSLT 2.0 e Regex (que não possui b limite da palavra)?
-
25-09-2019 - |
Pergunta
Estou tentando digitalizar uma série de palavras e procurar a presença de uma palavra específica (insensível a casos) em uma folha de estilo XSLT 2.0 usando o regex.
Tenho uma lista de palavras que desejo iterar e determinar se elas existem ou não dentro de uma determinada string.
Eu quero combinar com uma palavra em qualquer lugar dentro do texto especificado, mas Eu não quero combinar dentro de uma palavra (ou seja, uma pesquisa por foo
deve não combinar em "foo
D "e uma busca por bar
deve não combinar em "rebar
").
XSLT 2.0 Regex não possui um limite de palavra (\b
), então eu preciso replicá -lo da melhor maneira possível.
Solução
Você pode usar a alternância para evitar a repetição:
<xsl:if test="matches($prose, concat('(^|\W)', $word, '($|\W)'),'i')">
Outras dicas
Se o seu processador XSLT 2.0 for Saxon 9, você poderá usar a sintaxe da expressão regular Java (incluindo b) com as correspondências de funções, tokenize e substituir iniciando o atributo de sinalização com uma marca de exclamação:
<xsl:value-of select="matches('all foo is bar', '\bfoo\b', '!i')"/>
Michael Kay mencionou essa opção recentemente na lista de discussão XSL.