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 = "[`,./;\[]\-&<>?:"\(\)|]+"
请注意,使用双\
将它们转换为字符串中的单个,因此在分析模式时,下一个字符将被转义。