Java正则表达式匹配除了之外的所有字符

Tom*_*mmy 13 java regex

匹配除特定字符之外的所有字符的正确语法是什么.

例如,我想匹配除字母[A-Z] [a-z]和数字之外的所有内容[0-9].

我有

string.matches("[^[A-Z][a-z][0-9]]")
Run Code Online (Sandbox Code Playgroud)

这是不正确的?

Pau*_*aul 23

是的,你不需要[]像那样嵌套.请改用:

"[^A-Za-z0-9]"
Run Code Online (Sandbox Code Playgroud)

这是一个角色类.


ste*_*ema 6

如果你想匹配除字母之外的任何东西,你应该看看Unicode属性.

\p{L} 是任何语言的任何一种信件

使用大写的"P"代替它是否定,所以\P{L}匹配任何不是字母的东西.

\d或者\p{Nd}是匹配的数字

因此,您在现代Unicode样式中的表达式将如下所示

使用否定的字符类

[^\p{L}\p{Nd}]
Run Code Online (Sandbox Code Playgroud)

或否定的财产

[\P{L}\P{Nd}]
Run Code Online (Sandbox Code Playgroud)

接下来的事情是,matches()将表达式与完整字符串匹配,因此表达式仅在字符串中只有一个字符时才为真.所以你需要添加一个量词:

string.matches("[^\p{L}\p{Nd}]+")
Run Code Online (Sandbox Code Playgroud)

当完整字符串只有非字母数字和至少其中一个时,返回true.