Wie finde ich ein Wort innerhalb von Text mit XSLT 2.0 und Regex (was nicht b Wortgrenze hat)?
-
25-09-2019 - |
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 "foo
d "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.
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.