正则表达式来排除特殊字符的Java
我想写一个正则表达式包括:字母,数字和空格,但我要排除像!'^+%&/()=?_-*£#$
特殊字符等正则表达式来排除特殊字符的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
你可以去用不同的方式做到这一点。
注意 - 这两个正则表达式必须与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
)+
'\ S'是什么,但空间。你希望'\ s'(小写)匹配空格。 – Andreas