Groovy 2.4在这里。我正在尝试构建一个将过滤掉以下所有字符的正则表达式:
`,./;[]-&<>?:"()|
这是我最好的尝试:
static void main(String[] args) {
// `,./;[]-&<>?:"()|
String regex = "`,./;[]-&<>?:\"()|"
String test = "ooekrofkrofor ` oxkeoe , wdkeodeko / kodek ] woekoedk \" swjiej ' wsjwdjeiji :"
println test.replaceAll(regex, "")
}
但是这会在regex
字符串定义上产生编译错误,抱怨:
非法字符范围(至&lt; from)
不确定这是Java还是Groovy,但我无法弄清楚如何正确定义regex
以便它能够平息错误并正确地从我的字符串中删除这些“非法字符”。有什么想法吗?
答案 0 :(得分:1)
您需要在模式中转义一些特殊字符:
String regex = "[`,./;\\[]\\-&<>?:\"\\(\\)|]+"
注意使用double \\
将它们转换为字符串中的单个\
,因此在解析模式时,下一个字符将被转义。
答案 1 :(得分:1)
在我看来,您想删除regex
变量中列出的所有字符。问题是您需要character class时声明序列(用[]
括起字符。)
请参阅Groovy demo:
String regex = "[`,./;\\[\\]&<>?:\"()|-]+"
^ ^^^^^^ ^ ^
String test = "ooekrofkrofor ` oxkeoe , wdkeodeko / kodek ] woekoedk \" swjiej ' wsjwdjeiji :"
println test.replaceAll(regex, "")
输出:ooekrofkrofor oxkeoe wdkeodeko kodek woekoedk swjiej ' wsjwdjeiji
由于[`,./;\[\]&<>?:\"()|-]
量词,模式现在包含与其中定义的任何字符匹配的字符类 - +
- 一次或多次。请注意,在字符类中,必须始终对]
和[
进行转义,并且当放置在字符类的开头/结尾时,-
可以保留未转义状态。