Groovy在正则表达式中抱怨非法字符范围

问题描述:

Groovy 2.4在这里。我试图建立一个正则表达式,将过滤掉所有的下列字符:Groovy在正则表达式中抱怨非法字符范围

`,./;[]-&<>?:"()| 

这是我最好的尝试:

static void main(String[] args) { 
    // `,./;[]-&<>?:"()| 
    String regex = "`,./;[]-&<>?:\"()|" 
    String test = "ooekrofkrofor ` oxkeoe , wdkeodeko/kodek ] woekoedk \" swjiej ' wsjwdjeiji :" 
    println test.replaceAll(regex, "") 
} 

然而,这会产生一个编译错误的regex列定义,抱怨:

(从到<)

非法字符范围

不知道这是一个Java还是Groovy的东西,但我无法弄清楚如何正确定义regex,这样它可以解决错误,并将这些“非法字符”正确地从我的字符串中删除。有任何想法吗?

+0

是否需要转义一些(除了“)?[\^$。|?* +()是正则表达式的特殊字符 – adrianmcmenamin

在我看来,你想删除你的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

图案现在包含一个字符类匹配任何在其内部限定的字符 - [`,./;\[\]&<>?:\"()|-] - 一次或多次由于+量词。请注意,在字符类中,][必须始终转义,并且-可以在放置在字符类的开始/结尾时保留为未转义状态。

你需要逃避你的模式的几个特殊字符:

String regex = "[`,./;\\[]\\-&<>?:\"\\(\\)|]+" 

注意事项使用双\\把它们变成字符串中的单个\,所以当图案进行解析,下一个字符转义。