正则表达式在Groovy中转义特殊字符

时间:2018-07-03 18:25:52

标签: regex groovy

我正在尝试使用正则表达式对特殊字符进行转义,现在在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: \!\"\@\#\$\%\&\/\(\)\=\?

1 个答案:

答案 0 :(得分:1)

请注意,[\W|_] = [\W_],因为|是非单词char。另外,建议使用斜杠字符串定义正则表达式,因为其中的反斜杠表示文字反斜杠,即用于构成 regex转义的反斜杠。

您似乎不想匹配空格,因此需要从\s中减去[\W_],并使用/[\W_&&[^\s]]/正则表达式。

第二,在替换部分,您可以使用单引号字符串文字以避免插值$0

.replaceAll(specialCharRegex, '\\\\$0')

否则,请用双引号引起来的字符串文字中的$进行转义:

.replaceAll(specialCharRegex, "\\\\\$0")

斜线字符串也可以按预期工作:

.replaceAll(specialCharRegex, /\\$0/)

请参见online Groovy demo

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/));             // \!\"\@\#\$\%\&\/\(\)\=\?