2010-03-07 20 views
1

我正在嘗試掃描一串字,並在使用REGEX的XSLT 2.0樣式表中查找特定單詞(不區分大小寫)的存在。如何使用XSLT 2.0和REGEX(不具有 b字邊界)在文本中查找單詞?

我有一個單詞列表,我希望迭代並確定它們是否存在於給定的字符串中。

我想給定文本中的任何地方匹配就一個字,但我不想內匹配一個字(即一種foo搜索應該匹配的「foo d 「並搜索bar應該不是匹配」re bar「)。

XSLT 2.0 REGEX沒有字邊界(\b),所以我需要盡我所能地複製它。

回答

4

您可以使用輪換,以避免重複:

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

該表達式不會編譯,因爲XSLT沒有非捕獲組。但是,\ W被支持,第一組和第三組的替代模式確實很好地簡化了事情。確定,謝謝。下面的表達式確實有效:'matches($ prose,concat('(^ | \ W)',$ word,'($ | \ W)'),'i')' – 2010-03-08 02:08:30

+0

好的,謝謝。將編輯我的答案:) – 2010-03-08 07:32:14

1

如果你的XSLT 2.0處理器撒克遜9,那麼你可以使用Java正則表達式語法(包括\ b)與功能相匹配,令牌化和開始更換帶有感嘆號的標誌屬性:

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

Michael Kay在XSL郵件列表中最近提到了該選項。

+0

@Martin - 你得到它的工作?我看到邁克爾凱說這是一個「無證,基本上未經測試,完全不符合要求的選項」。當我在oXygen 11中針對Saxon 9.2.0.3運行它時,它會拋出一個錯誤:net.sf.saxon.trans.XPathException:無效字符'!'在正則表達式標誌中 - 無效字符'!'在正則表達式標記中 開始位置:881:0 URL:http://www.w3.org/TR/2005/WD-xpath-functions-20050211/#ERRFORX0002 – 2010-03-09 01:47:48

+0

是的,它對我來說很好用Saxon 9.2 HE ,使用9.2.0.5和9.2.0.3測試(現在),從命令行運行例如java -jar saxon9he.jar。我不確定爲什麼會出現這種錯誤,但是指向XPath函數的工作草案(WD)版本的URL可能表示您正在運行比您認爲的更老版本的Saxon。 – 2010-03-09 12:06:27

相關問題