繁体   English   中英

Java正则表达式匹配除

[英]Java regex match all characters except

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

例如,我想匹配除字母[AZ] [az]和数字[0-9]

我有

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

这不正确吗?

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

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

这都是一个字符类。

如果您想匹配除字母以外的任何内容,您应该查看Unicode properties

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

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

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

所以你在现代 Unicode 风格中的表达看起来像这样

要么使用否定字符类

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

或否定属性

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

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

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

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

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

几乎正确。 你想要的是:

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

这是一个很好的教程

假设您想确保字符串中没有 _ 符号,那么您可以简单地使用这样的东西。

    Pattern pattern = Pattern.compile("_");
    Matcher matcher = Pattern.matcher(stringName);
    if(!matcher.find()){
       System.out.println("Valid String");
    }else{
        System.out.println("Invalid String");
     }

您可以否定字符类

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM