Velocity似乎在更换字符串方面遇到了一些麻烦:
#set( $stringOriginal = "some * oxdd --- strin+g here" )
#set( $stringAfter = $stringOriginal.replaceAll("\\W+","+") )
$stringAfter
和非单词部分保持不变:它打印此
some * oxdd --- strin+g here
但是 如果我使用[^a-zA-Z_0-9]+
而不是预定义的类\W
#set( $stringOriginal = "some * oxdd --- strin+g here" )
#set( $stringAfter = $stringOriginal.replaceAll("[^a-zA-Z_0-9]+","+") )
$stringAfter
一切都很花花公子
some+oxdd+strin+g+here
尝试以奇数\
投掷逃跑a
Lexical error: org.apache.velocity.runtime.parser.TokenMgrError:
使它看起来像速度试图逃避它自己。
我使用的是amazon-mturk cli,它带有 velocity-1.5 和 velocity-tools-1.4 。
答案 0 :(得分:2)
单\
适用于velocity-1.7
#set( $stringAfter = $stringOriginal.replaceAll("\W+","+") )
在速度-1.5上,逃脱的解析确实似乎没有了。速度中的"\\W"
表示java中的"\\\\W"
(即两个反斜杠),但速度中的"\W"
会导致解析错误。
但是,单引号适用于v1.5
#set( $stringAfter = $stringOriginal.replaceAll('\W+',"+") )
我想知道你如何在速度中表达\n
等等 - 但我的实验结束于此。
虽然Velocity最初是一种“简单”的模板语言,但它增加了越来越多的功能来模仿“真正的”语言,语法开始失控:)