【问题标题】:Groovy complaining about illegal character range in regexGroovy 抱怨正则表达式中的非法字符范围
【发布时间】:2016-04-22 21:29:05
【问题描述】:

这里是 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 groovy


【解决方案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

该模式现在包含一个匹配其中定义的任何字符的字符类 - [`,./;\[\]&amp;&lt;&gt;?:\"()|-] - 一次或多次,因为 + 量词。请注意,在字符类中,][ 必须始终进行转义,而将 - 放置在字符类的开头/结尾时可以不进行转义。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-04-13
      • 2016-01-01
      • 2019-06-22
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 2011-12-05
      • 2015-08-28
      • 2015-04-16
      相关资源
      最近更新 更多