我想寫一個正則表達式包括:字母,數字和空格,但我要排除像!'^+%&/()=?_-*£#$
特殊字符等正則表達式來排除特殊字符的Java
我以爲我可以使用[a-zA-Z]
信訪,[0-9]
數字和\S
空間字符。
[A-ZA-Z0-9 \ S]
但我試圖清除可能有這樣é,ü,ğ,i,ç
等字母串。 我不希望這些字母被刪除。
是否有可能編寫這樣的正則表達式?
我想寫一個正則表達式包括:字母,數字和空格,但我要排除像!'^+%&/()=?_-*£#$
特殊字符等正則表達式來排除特殊字符的Java
我以爲我可以使用[a-zA-Z]
信訪,[0-9]
數字和\S
空間字符。
[A-ZA-Z0-9 \ S]
但我試圖清除可能有這樣é,ü,ğ,i,ç
等字母串。 我不希望這些字母被刪除。
是否有可能編寫這樣的正則表達式?
是的,這是可能的。
\p{L}
匹配任何是Unicode字母AZ和字母等é,U,G,I,C\d
一個數字匹配(等於[0-9])\s
的空間相匹配,製表符,回車,換行,垂直製表符或換頁符[\p{L}\d\s]+
應該匹配的一個或多個字符存在於列表中
在這裏你可以看到一個例子:
我認爲\ p {L}也能匹配這些以及''even㙹㙺㙼㙽㙾㚀㚁㚁㚃㚃㚄㚅㚆''甚至不在Unicode模式下,這是不幸的。 – sln
如果要使用正則表達式無辦法做到這一點,那麼你可以使用Apache StringUtils.isAlphanumericSpace(String str)
你可以去用不同的方式做到這一點。
注意 - 這兩個正則表達式必須與Unicode character class flag
選項一起運行。
有兩種方法去
注意,這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
)+
(?:[\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
)+
'\ S'是什麼,但空間。你希望'\ s'(小寫)匹配空格。 – Andreas