我正在尝试使用正则表达式对特殊字符进行转义,现在在Java上使用它并且可以完美地工作,它完全符合我想要的Scape any special character
,但是我在Groovy中尝试过,但是同一行没有工作,据我投资,是因为$
是Groovy中保留的,到目前为止,我已经尝试过了;
Java :(完成任务)
String specialCharRegex = "[\\W|_]";
...
term = term.replaceAll(specialCharRegex, "\\\\$0");
...
时髦:
错误
String specialCharRegex = "[\\W|_]";
...
term = term.replaceAll(specialCharRegex, "\\\\$0");
...
错误
String specialCharRegex = "[\\W|_]";
...
term = term.replaceAll(specialCharRegex, "\\\\\$0");
...
错误
String specialCharRegex = "[\\W|_]";
...
term = term.replaceAll(specialCharRegex, '\\\\$0');
...
错误
String specialCharRegex = "[\\W|_]";
...
term = term.replaceAll(specialCharRegex, '\\\\$1');
...
我使用https://groovyconsole.appspot.com/
进行测试。
Groovy中的输出应为:
Input: test 1& test
Output: test 1\& test
Input: test 1& test 2$
Output: test 1\& test 2\$
Input: test 1& test 2$ test 3%
Output: test 1\& test 2\$ test 3\%
Input: !"@#$%&/()=?
Output: \!\"\@\#\$\%\&\/\(\)\=\?
答案 0 :(得分:1)
请注意,[\W|_]
= [\W_]
,因为|
是非单词char。另外,建议使用斜杠字符串定义正则表达式,因为其中的反斜杠表示文字反斜杠,即用于构成 regex转义的反斜杠。
您似乎不想匹配空格,因此需要从\s
中减去[\W_]
,并使用/[\W_&&[^\s]]/
正则表达式。
第二,在替换部分,您可以使用单引号字符串文字以避免插值$0
:
.replaceAll(specialCharRegex, '\\\\$0')
否则,请用双引号引起来的字符串文字中的$
进行转义:
.replaceAll(specialCharRegex, "\\\\\$0")
斜线字符串也可以按预期工作:
.replaceAll(specialCharRegex, /\\$0/)
String specialCharRegex = /[\W_&&[^\s]]/;
println('test 1& test'.replaceAll(specialCharRegex, '\\\\$0')); // test 1\& test
println('test 1& test 2$'.replaceAll(specialCharRegex, "\\\\\$0")); // test 1\& test 2\$
println('test 1& test 2$ test 3%'.replaceAll(specialCharRegex, /\\$0/)); // test 1\& test 2\$ test 3\%
println('!"@#$%&/()=?'.replaceAll(specialCharRegex, /\\$0/)); // \!\"\@\#\$\%\&\/\(\)\=\?