replaceAll使用apache velocity中的预定义字符类

时间:2015-09-12 00:22:58

标签: java regex velocity

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

1 个答案:

答案 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最初是一种“简单”的模板语言,但它增加了越来越多的功能来模仿“真正的”语言,语法开始失控:)