Wie finde ich ein Wort innerhalb von Text mit XSLT 2.0 und Regex (was nicht b Wortgrenze hat)?

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

Frage

Ich versuche, eine Reihe von Wörtern zu scannen und nach dem Vorhandensein eines bestimmten Wortes (Fallunempfindlichkeit) in einem XSLT 2.0 -Stylesheet mit Regex zu suchen.

Ich habe eine Liste von Wörtern, über die ich iterieren und feststellen möchte, ob sie innerhalb einer bestimmten Zeichenfolge existieren oder nicht.

Ich möchte mit einem Wort überall innerhalb des gegebenen Textes übereinstimmen, aber Ich möchte nicht übereinstimmen innerhalb ein Wort (dh eine Suche nach foo sollte nicht Match on "food "und eine Suche nach bar sollte nicht Match on "Rebar").

XSLT 2.0 Regex hat keine Wortgrenze (\b), also muss ich es so gut ich kann replizieren.

War es hilfreich?

Lösung

Sie können Wechsel verwenden, um Wiederholungen zu vermeiden:

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

Andere Tipps

Wenn Ihr XSLT 2.0 -Prozessor Saxon 9 ist, können Sie die reguläre Ausdrucksyntax (einschließlich b) mit den Funktionen der Funktionen verwenden, tokenisieren und ersetzen Sie das Flag -Attribut mit einem Ausrufezeichen:

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

Michael Kay erwähnte diese Option kürzlich auf der XSL -Mailingliste.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top