匹配除特定字符之外的所有字符的正确语法是什么。
例如,我想匹配除字母[A-Z] [a-z]
和数字之外的所有内容[0-9]
。
我有
string.matches("[^[A-Z][a-z][0-9]]")
这是不正确的吗?
是的,你不需要[]
像这样嵌套。改用这个:
"[^A-Za-z0-9]"
这都是一个字符类。
如果您想匹配除字母以外的任何内容,您应该查看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。
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.