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

时间:2016-04-22 21:29:05

标签: regex groovy

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以便它能够平息错误并正确地从我的字符串中删除这些“非法字符”。有什么想法吗?

2 个答案:

答案 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

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