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

时间:2013-04-25 06:28:35

标签: java regex

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

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

我有

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

这是不正确的?

6 个答案:

答案 0 :(得分:20)

是的,您不需要那样的嵌套[]。请改用:

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

这是一个角色类。

答案 1 :(得分:6)

如果您想匹配除字母之外的任何内容,您应该查看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}]+")
当完整的字符串只包含非字母数字和至少其中一个字符串时,

返回true。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

几乎是正确的。你想要的是:

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

这是一个很好的tutorial

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

您可以negate character classes

If {{ job_metadata }} is rendered in a job, it will include the following additional fields: ... extra_vars ...