【问题标题】:Velocity Template - regular expressions速度模板 - 正则表达式
【发布时间】:2016-03-22 14:25:59
【问题描述】:

我刚开始在新工作中使用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 类具有的任何正则表达式方法都可以在速度模板中使用。

【问题讨论】:

    标签: regex velocity


    【解决方案1】:

    假设您的 $gatewayURL 是这样的:

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

    然后:

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

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

    Velocity 没有自己的正则表达式实现,它只是将您提供的参数传递给相应的本地 java 方法,仅此而已。因此,您可以使用几乎完整的 Java SDK。

    【讨论】:

    • 这是针对特定版本的速度吗?我们在这里运行 1.4 (一堆旧垃圾......)我似乎无法让您的正则表达式版本正常工作。另外,在写下我的初始评论后,我确实发现该对象可以访问 java 方法,具体取决于对象类型
    • @dtan 抱歉,我不确定 1.4,它太旧了。从那以后发生了一些剧烈的变化......
    • 这是非常通用的 Velocity。它应该在 1.4 中工作。但当然,JDK 必须至少为 1.4。 (或您正在调用的方法的任何相关版本)。
    • @will - 我不完全确定堆栈在起作用,但我只知道有很多遗留代码,因为该系统是在 2000 年代初首次构建的,无论出于何种原因,他们没有随着新版本的发布而升级。
    【解决方案2】:

    这个答案已经晚了,但对于遇到相同问题的 Velocity 用户来说,作为参考可能仍然很好。

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

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

    【讨论】:

    • 大声笑。一定要喜欢单引号和双引号的技巧:)。如果我仍然使用速度(感谢上帝,我没有),我会尝试给你答案,但我无法验证任何事情。
    • 没问题。经过多年的 JSP 生存,Velocity 并没有那么糟糕...... :-)
    猜你喜欢
    • 2011-05-18
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多