Java正则表达式:匹配除某个字符外的所有字符

13

如何正确匹配除特定字符之外的所有字符。

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

我有:

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

这个有错误吗?

6个回答

27

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

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

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

这都属于一个字符类。


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


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

1
几乎正确。你想要的是:
string.matches("[^A-Za-z0-9]")

这是一个好的教程链接:

tutorial


0
假设您想确保字符串中没有下划线符号,那么您可以简单地使用类似于以下的代码。
    Pattern pattern = Pattern.compile("_");
    Matcher matcher = Pattern.matcher(stringName);
    if(!matcher.find()){
       System.out.println("Valid String");
    }else{
        System.out.println("Invalid String");
     }

0

您可以否定字符类

"[^abc]"       // matches any character except a, b, or c (negation).
"[^a-zA-Z0-9]" // matches non-alphanumeric characters.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接