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

2022-09-04 05:56:25

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

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

我有

string.matches("[^[A-Z][a-z][0-9]]")

这是不正确的吗?


答案 1

是的,你不需要像那样嵌套。请改用以下内容:[]

"[^A-Za-z0-9]"

它都是一个字符类。


答案 2

如果要匹配除字母以外的任何内容,则应查看 Unicode 属性

\p{L}是来自任何语言的任何类型的字母

使用大写的“P”代替它是否定,因此将匹配任何不是字母的东西。\P{L}

\d或匹配数字\p{Nd}

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

使用否定字符类

[^\p{L}\p{Nd}]

或否定的属性

[\P{L}\P{Nd}]

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

string.matches("[^\p{L}\p{Nd}]+")

当完整字符串只有非字母数字且至少有一个字母数字时,返回 true。