13

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

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

我有

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

这是不正确的吗?

4

6 回答 6

27

是的,你不需要[]像这样嵌套。改用这个:

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

这都是一个字符类。

于 2013-04-25T06:31:07.230 回答
7

如果您想匹配除字母以外的任何内容,您应该查看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。

于 2013-04-25T06:43:47.910 回答
1

几乎是对的。你想要的是:

string.matches("[^A-Za-z0-9]")

这是一个很好的教程

于 2013-04-25T06:31:51.420 回答
1
string.matches("[^A-Za-z0-9]")
于 2013-04-25T06:30:40.540 回答
0

假设您要确保没有字符串中包含 _ 符号,那么您只需使用类似这样的东西。

    Pattern pattern = Pattern.compile("_");
    Matcher matcher = Pattern.matcher(stringName);
    if(!matcher.find()){
       System.out.println("Valid String");
    }else{
        System.out.println("Invalid String");
     }
于 2013-12-30T02:12:01.827 回答
0

您可以否定字符类

"[^abc]"       // matches any character except a, b, or c (negation).
"[^a-zA-Z0-9]" // matches non-alphanumeric characters.
于 2020-10-02T14:24:12.277 回答