2016-04-22 77 views
1

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,這樣它可以解決錯誤,並將這些「非法字符」正確地從我的字符串中刪除。有任何想法嗎?

+0

是否需要轉義一些(除了「)?[\^$。|?* +()是正則表達式的特殊字符 – adrianmcmenamin

回答

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

圖案現在包含一個字符類匹配任何在其內部限定的字符 - [`,./;\[\]&<>?:\"()|-] - 一次或多次由於+量詞。請注意,在字符類中,][必須始終轉義,並且-可以在放置在字符類的開始/結尾時保留爲未轉義狀態。

1

你需要逃避你的模式的幾個特殊字符:

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

注意事項使用雙\\把它們變成字符串中的單個\,所以當圖案進行解析,下一個字符轉義。

相關問題