replaceAll 在 apache velocity 中使用预定义字符 类
replaceAll using predefined character classes in apache 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]+
而不是预定义的 class \W
#set( $stringOriginal = "some * oxdd --- strin+g here" )
#set( $stringAfter = $stringOriginal.replaceAll("[^a-zA-Z_0-9]+","+") )
$stringAfter
一切都很好
some+oxdd+strin+g+here
尝试以奇数 \
逃脱会抛出
Lexical error: org.apache.velocity.runtime.parser.TokenMgrError:
让它看起来像 velocity 试图逃避它自己。
我正在使用 amazon-mturk cli,它附带 velocity-1.5 和 velocity-tools-1.4.
单个 \
适用于 velocity-1.7
#set( $stringAfter = $stringOriginal.replaceAll("\W+","+") )
在 velocity-1.5 上,确实转义解析似乎不合时宜。 velocity 中的 "\W"
表示 java 中的 "\\W"
(即两个反斜杠),但是 velocity 中的 "\W"
会导致解析错误。
但是,单引号适用于 v1.5
#set( $stringAfter = $stringOriginal.replaceAll('\W+',"+") )
我想知道你如何用速度来表达 \n
等 -- 但我的实验到此为止。
虽然 Velocity 最初是一种 "simple" 模板语言,但它添加了越来越多的功能来模仿 "real" 语言,并且语法开始失控 :)
Velocity 似乎在字符串替换方面遇到了一些问题:
#set( $stringOriginal = "some * oxdd --- strin+g here" )
#set( $stringAfter = $stringOriginal.replaceAll("\W+","+") )
$stringAfter
和非单词部分,保持不变:它打印这个
some * oxdd --- strin+g here
但是 如果我使用 [^a-zA-Z_0-9]+
而不是预定义的 class \W
#set( $stringOriginal = "some * oxdd --- strin+g here" )
#set( $stringAfter = $stringOriginal.replaceAll("[^a-zA-Z_0-9]+","+") )
$stringAfter
一切都很好
some+oxdd+strin+g+here
尝试以奇数 \
逃脱会抛出
Lexical error: org.apache.velocity.runtime.parser.TokenMgrError:
让它看起来像 velocity 试图逃避它自己。
我正在使用 amazon-mturk cli,它附带 velocity-1.5 和 velocity-tools-1.4.
单个 \
适用于 velocity-1.7
#set( $stringAfter = $stringOriginal.replaceAll("\W+","+") )
在 velocity-1.5 上,确实转义解析似乎不合时宜。 velocity 中的 "\W"
表示 java 中的 "\\W"
(即两个反斜杠),但是 velocity 中的 "\W"
会导致解析错误。
但是,单引号适用于 v1.5
#set( $stringAfter = $stringOriginal.replaceAll('\W+',"+") )
我想知道你如何用速度来表达 \n
等 -- 但我的实验到此为止。
虽然 Velocity 最初是一种 "simple" 模板语言,但它添加了越来越多的功能来模仿 "real" 语言,并且语法开始失控 :)