2013-05-29 42 views
6

是否可以在字符類中使用錨?這不起作用:正則表達式內的字符類

analyze-string('abcd', '[\s^]abcd[\s$]') 

它看起來像^$被視爲字面當一個字符類中;然而,逃脫它們(\^,\$)也不起作用。我試圖用這個表達式來創建字邊界(\b在XSLT/XQuery中不可用),但我不想使用組((^|\s)) - 由於非捕獲組不可用,因此我不希望使用組((^|\s)) - 因爲非捕獲組不可用,這意味着在某些情況下,我最終可能會產生大量不需要的捕獲組,並且這會創建一個新任務,在一組不需要的捕獲組中找到「真實」捕獲組。

+0

無論誰投票將其視爲重複關閉,你是否可以提供指向重複問題的鏈接? – LarsH

+0

@LarsH這不是我,但這是所謂的愚蠢:http://stackoverflow.com/questions/9622869/cvc-pattern-valid-value-a-is-not-facet-valid-with-respect-到圖案一個座。雖然有幾個共同點,但我認爲這是一個非常不同的問題。 – wst

回答

4

我認爲答案是否定的,你不能包括^$如在[]錨,只爲文字字符。 (我以前也希望你能做到這一點)。

但是,你可以在字符串的正面和背面連接一個空格,然後查找\s作爲單詞邊界,而不必介意錨點。例如。

analyze-string(concat(' ', 'abcd xyz abcd', ' '), '\sabcd\s') 

您可能還需要每個\s+,但是這是一個單獨的問題。

+0

這是一個破解,但我會拿它! – wst

0

在第一個方括號之後使用插入符號將否定字符類。它基本上給你的東西和你想要做的相反,這意味着角色類將匹配任何不在角色類中的角色。否定字符類也匹配(不可見)換行符。

您可以嘗試做一個負向預測。

(?!\s) 
+0

不幸的是,在XQuery和XSLT規範中,前瞻/後面不包含在正則表達式中。我更新了正則表達式,使其更加清晰 - 我實際上打算在角色類中加入錨。目標是要求匹配「空間或開始/結束錨點(不捕獲)」。 – wst

2

如果您使用analyze-string作爲函數,那麼可能您使用的是XSLT或XQuery的3.0實現。

在這種情況下,你爲什麼說「非捕獲組不可用」? XPath Functions and Operators 3.0 spec明確指出「非捕獲組也被識別,這些由語法(?:xxxx)表示。」

+0

我正在使用MarkLogic,它只實現了3.0的子集。 – wst