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
,这样它可以解决错误,并将这些“非法字符”正确地从我的字符串中删除。有任何想法吗?
答
在我看来,你想删除你的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 = "[`,./;\\[]\\-&<>?:\"\\(\\)|]+"
注意事项使用双\\
把它们变成字符串中的单个\
,所以当图案进行解析,下一个字符转义。
是否需要转义一些(除了“)?[\^$。|?* +()是正则表达式的特殊字符 – adrianmcmenamin