2017-05-28 167 views
0

我想寫一個正則表達式包括:字母,數字和空格,但我要排除像!'^+%&/()=?_-*£#$特殊字符等正則表達式來排除特殊字符的Java

我以爲我可以使用[a-zA-Z]信訪,[0-9]數字和\S空間字符。

[A-ZA-Z0-9 \ S]

但我試圖清除可能有這樣é,ü,ğ,i,ç等字母串。 我不希望這些字母被刪除。

是否有可能編寫這樣的正則表達式?

+1

'\ S'是什麼,但空間。你希望'\ s'(小寫)匹配空格。 – Andreas

回答

2

是的,這是可能的。

  • \p{L}匹配任何是Unicode字母AZ和字母等é,U,G,I,C
  • \d一個數字匹配(等於[0-9])
  • \s的空間相匹配,製表符,回車,換行,垂直製表符或換頁符

[\p{L}\d\s]+應該匹配的一個或多個字符存在於列表中

在這裏你可以看到一個例子:

+0

我認爲\ p {L}也能匹配這些以及''even㙹㙺㙼㙽㙾㚀㚁㚁㚃㚃㚄㚅㚆''甚至不在Unicode模式下,這是不幸的。 – sln

0

你可以去用不同的方式做到這一點。

注意 - 這兩個正則表達式必須與Unicode character class flag選項一起運行。

有兩種方法去


  • 使用alnum和ASCII和擴展ASCII範圍不變。

注意,這U+011F ğ LATIN SMALL LETTER G WITH BREVE超出
0 - 在下面的正則表達式FF範圍,這樣就不會得到匹配。

(?:\p{Alnum}(?<=[\x{00}-\x{FF}])|\s)+

解釋

(?: 
     \p{Alnum}      # Any alpha numeric Unicode 
     (?<= [\x{00}-\x{FF}])  # In the U+0 - U+0FF codepoint range 
    |        # or, 
     \s       # Whitespace 
)+ 

  • 或者,你可以去拉丁班航線,使用拉丁塊的/腳本和alnum範圍不變。

(?:[\p{Block=Latin_1_Supplement}\p{Block=Latin_Extended_A}\p{Block=Latin_Extended_Additional}\p{Block=Latin_Extended_B}\p{Block=Latin_Extended_C}\p{Block=Latin_Extended_D}\p{Block=Basic_Latin}\p{Script=Latin}](?<=\p{Alnum})|\s)+

擴展

(?: 
     [\p{Block=Latin_1_Supplement}\p{Block=Latin_Extended_A}\p{Block=Latin_Extended_Additional}\p{Block=Latin_Extended_B}\p{Block=Latin_Extended_C}\p{Block=Latin_Extended_D}\p{Block=Basic_Latin}\p{Script=Latin}] 
     (?<= \p{Alnum}) 
    | 
     \s 
)+