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



Groovy 2.4 在这里。我正在尝试构建一个正则表达式,它将过滤掉以下所有字符:

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

这是我最好的尝试:

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

但是,这会在regex字符串定义上产生编译错误,抱怨:

非法字符范围(<)

不确定这是 Java 还是 Groovy 的东西,但我无法弄清楚如何正确定义regex,以便它平息错误并正确地从我的字符串中删除这些"非法字符"。有什么想法吗?

在我看来,

您想删除regex变量中列出的所有字符。问题是您在需要字符时声明了一个序列(用 [] 将字符括起来)。

参见时髦演示:

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

输出:ooekrofkrofor oxkeoe wdkeodeko kodek woekoedk swjiej ' wsjwdjeiji

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

您需要转义模式中的一些特殊字符:

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

请注意,使用双\将它们转换为字符串中的单个,因此在分析模式时,下一个字符将被转义。

最新更新