速度模板-正则表达式

| 我刚刚开始将速度用于一项新工作,但我真的不喜欢已经发现的东西。在这一点上,我实际上更喜欢freemarker = X。 无论如何,我正在尝试做一个正则表达式,但我看到了这一点(搜索“正则表达式”),但这并不是我正在执行的实现。 我没有对Java的任何访问权限,因此不存在编写自定义内容来执行此操作的选项(我什至不确定是否可行)。 这就是我现在所拥有的:
#set ( $envCheck = \"(localhost|staging|qa|cms)\\\\.site\" )
#set ( $envCheck = $envCheck.matches($gatewayURL) )
但是
$envCheck
总是以\“ false \”出现。页面上也定义了“ 2”,所以这不是问题。 这有可能吗?我正在阅读速度模板中可用的Java String类具有的任何regexp方法。     
已邀请:
假设您的
$gatewayURL
是这样的:
#set ( $gatewayURL = \"localhost.site\" )
然后:
#set ( $envCheck = \"(localhost|staging|qa|cms)\\.site\" )
#set ( $envCheck = $gatewayURL.matches($envCheck) )
无需屏蔽反斜杠,您应该在
gatewayURL
上调用
matches()
,而不是正则表达式。 Velocity没有自己的regexp实现,仅将您提供的参数传递给相应的本机Java方法即可。因此,您可以使用几乎完整的Java SDK。     
这个答案很晚,但是对于遇到同样问题的Velocity用户来说仍然可以作为参考。 我们使用Velocity 1.5(太大的任务是它们破坏了太多的模板,无法升级到1.7 / 1.6),并且遇到了相同的问题。上面的答案不起作用-没有转义(\\)的反冲会导致词法错误,而带有转义(\\\\)的反冲总是返回false,因为我认为它是从字面上解释的。解决此问题的正确方法是在定义regex表达式时使用单引号而不是双引号,因此Velocity不会尝试解释用于Java的字符串。
#set ( $envCheck = \'(localhost|staging|qa|cms)\\.site\' )
#set ( $envCheck = $envCheck.matches($gatewayURL) )
    

要回复问题请先登录注册