正则表达式来排除特殊字符的Java

问题描述:

我想写一个正则表达式包括:字母,数字和空格,但我要排除像!'^+%&/()=?_-*£#$特殊字符等正则表达式来排除特殊字符的Java

我以为我可以使用[a-zA-Z]信访,[0-9]数字和\S空间字符。

[A-ZA-Z0-9 \ S]

但我试图清除可能有这样é,ü,ğ,i,ç等字母串。 我不希望这些字母被删除。

是否有可能编写这样的正则表达式?

+1

'\ S'是什么,但空间。你希望'\ s'(小写)匹配空格。 – Andreas

是的,这是可能的。

  • \p{L}匹配任何是Unicode字母AZ和字母等é,U,G,I,C
  • \d一个数字匹配(等于[0-9])
  • \s的空间相匹配,制表符,回车,换行,垂直制表符或换页符

[\p{L}\d\s]+应该匹配的一个或多个字符存在于列表中

在这里你可以看到一个例子:

+0

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

如果要使用正则表达式无办法做到这一点,那么你可以使用Apache StringUtils.isAlphanumericSpace(String str)

你可以去用不同的方式做到这一点。

注意 - 这两个正则表达式必须与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 
)+