2011-05-23 98 views
1

我剛開始使用速度進行新工作,我真的不喜歡我已經找到的東西。在這一點上,我實際上更喜歡freemarker = X。 不管怎麼說,我試圖做一個正則表達式,我看到this little bit (search "regular expression"),但那不是我正在做的實現。速度模板 - 正則表達式

我沒有任何訪問的Java,所以選擇寫東西自定義做這個東西不存在(我甚至不知道如果這是可能的)。

這就是我現在所擁有的:

#set ($envCheck = "(localhost|staging|qa|cms)\\.site") 
#set ($envCheck = $envCheck.matches($gatewayURL)) 

$envCheck始終只是出來的「假」。 $gatewayURL也在頁面上定義,所以這不是問題。

這甚至有可能嗎?我讀到的是,在速度模板中可以使用java String類具有的任何正則表達式方法。

回答

3

假設你$gatewayURL是somethign這樣的:

#set ($gatewayURL = "localhost.site") 

然後:

#set ($envCheck = "(localhost|staging|qa|cms)\.site") 
#set ($envCheck = $gatewayURL.matches($envCheck)) 

沒有必要掩蓋反斜線,你應該叫matches()gatewayURL,而不是正則表達式。

Velocity沒有自己的regexp實現,只是將你提供的參數傳遞給相應的本地java方法,就這些。所以你可以使用幾乎完整的Java SDK。

+0

這是爲特定版本的速度?我們在這裏運行1.4(一堆遺留的垃圾...)我似乎無法讓你的正則表達式版本工作。 也寫了我的初始評論後,我確實發現該對象有權訪問java方法,具體取決於對象類型 – hellatan 2011-05-24 21:03:24

+0

@dtan對不起,我不確定1.4是否太舊。自那時以來發生了一些劇烈的變化...... – serg 2011-05-24 21:14:23

+0

這是非常通用的速度。它應該在1.4中工作。但是,當然,JDK必須至少爲1.4。 (或者你正在進行的方法調用的相關版本)。 – 2011-06-12 20:46:55

2

這個答案很晚,但作爲Velocity用戶遇到同樣問題的參考可能仍然很好。

我們使用Velocity 1.5(太大的任務,升級到1.7/1.6,因爲他們打破了太多的模板),並遇到同樣的問題。上面的答案是行不通的 - 沒有轉義(\)的後退導致詞法錯誤和轉義(\\)總是返回false,因爲我認爲它正在被逐字解釋。解決這個問題的正確方法是在定義regex表達式時使用單引號而不是雙引號,因此Velocity不會嘗試解釋用於Java的字符串。

#set ($envCheck = '(localhost|staging|qa|cms)\.site') 
#set ($envCheck = $envCheck.matches($gatewayURL)) 
+0

lolz。必須愛單雙引號技巧:)。如果我仍然以速度工作(感謝上帝,我不),我會盡力給你答案,但我無法驗證任何東西。 – hellatan 2016-03-22 14:30:07

+0

沒問題。經過幾年倖存的JSP,Velocity並沒有那麼糟糕...... :-) – dancnfoo 2016-03-24 20:52:27