Java 在apache velocity中使用预定义的字符类替换所有
Velocity在更换管柱时似乎遇到了一些问题:Java 在apache velocity中使用预定义的字符类替换所有,java,regex,velocity,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( $strin
#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
试图用奇数的\
逃逸会抛出一个词法错误: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上,确实转义解析看起来很奇怪“\\\\W”
(即两个反斜杠),但velocity中的“\W”
会导致解析错误
但是,在v1.5上,单引号在这里起作用
#set( $stringAfter = $stringOriginal.replaceAll('\W+',"+") )
我想知道如何用velocity表示\n
等,但我的实验到此结束
虽然Velocity最初是一种“简单”的模板语言,但它添加了越来越多的功能来模仿“真实”的语言,语法开始失控:)我没有使用
Velocity
,但是\
是否可能不是字符串文字中的特殊字符?您能用\W+
代替\\W+
吗?如果是这样的话,那么解释就是\\W+
将表示以\
开头的文本,后面有一个或多个W
。在发布之前,我尝试了\W
、\\W
、\\\W
和\\\W
。如果需要更多的时间,在这个世界上就没有什么好笑的了。使用调试器查看传递给replaceAll的内容?@loolo,我想some+oxdd+strin+g+这里;只需将非单词部分替换为+
@loolou,我假设您指的是set指令内部;它抛出错误。我得到词法错误:org.apache.velocity.runtime.parser.TokenMgrError:第2行第51列的词法错误。遇到:“W”(87),在“\”\\”
@user3276552之后-您使用的是最新版本吗?我使用的是aws cli。它与velocity-1.5和velocity-tools-1.4捆绑在一起(问题已更新)我下载了v1.7,它显然是在2010年发布的。v1.5是在2007年发布的。是的,这不是一个理想的情况。在这之前我没有接触过java;我的公司需要做一些amazon turk web界面不会做的事情。如果有更简单的选择,我会接受它。感谢您的帮助,很抱歉,这并不简单。