速度模板 - 正则表达式

时间:2011-05-23 21:04:13

标签: regex velocity

我刚刚开始使用力度换一份新工作而且我真的不喜欢我已经找到的东西。在这一点上,我实际上更喜欢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类所具有的任何regexp方法。

2 个答案:

答案 0 :(得分:3)

假设你的$gatewayURL有点像这样:

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

然后:

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

无需屏蔽反斜杠,您应该在matches()上调用gatewayURL,而不是正则表达式。

Velocity没有自己的regexp实现,只是将你提供的参数传递给相应的本机java方法,就是这样。因此,您可以随意使用完整的Java SDK。

答案 1 :(得分:2)

这个答案很晚,但可能仍然很好,作为Velocity用户遇到同样问题的参考。

我们使用Velocity 1.5(太大的任务升级到1.7 / 1.6,因为他们打破了太多的模板)并遇到了同样的问题。上面的答案不起作用 - 没有转义的反弹(\)导致词法错误,并且转义(\\)总是返回false,因为我认为它是按字面解释的。解决问题的正确方法是在定义正则表达式时使用单引号而不是双引号,这样Velocity就不会尝试解释用于Java的字符串。

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