Как найти слово в тексте, используя XSLT 2.0 и Regex (который не имеет b слово границы)?

StackOverflow https://stackoverflow.com/questions/2397574

Вопрос

Я пытаюсь просканировать строку слов и искать наличие конкретного слова (нечувствительности к регистру) в стиле XSLT 2.0 с использованием Regex.

У меня есть список слов, которые я хочу повторять и определить, существуют ли они в данной строке.

Я хочу сопоставить слово в любом месте в данном тексте, но Я не хочу совпадать в пределах слово (то есть поиск foo должен нет совпадатьfooD »и поиск bar должен нет соответствовать на "Rebar").

REGEX XSLT 2.0 не имеет границы слова (\b), поэтому мне нужно реплицировать его как можно лучше.

Это было полезно?

Решение

Вы можете использовать чередование, чтобы избежать повторения:

<xsl:if test="matches($prose, concat('(^|\W)', $word, '($|\W)'),'i')">

Другие советы

Если ваш процессор XSLT 2.0 является Saxon 9, вы можете использовать синтаксис регулярного выражения Java (включая b) с соответствующими функциями, токеризировать и заменить на запуск атрибута флага с помощью восклицательного знака:

<xsl:value-of select="matches('all foo is bar', '\bfoo\b', '!i')"/>

Майкл Кей недавно упомянул этот вариант на списке рассылки XSL.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top