上一篇,写了一个QQ号码规则的正则表达式,并没有介绍里面这个正则每个符号代表什么含义。这篇开始,我们就来学习一些Java里正则的符号的含义,先来看看字符类的内容。
1.API中字符类含义
打开JDK API 搜索String类,找到match()方法,点击旁边的正则表达式链接。然后下来找到字符类部分,以下截图。
2.字符类练习
1)[abc]
package regex;
public class Demo1_Regex {
public static void main(String[] args) {
String regex = "[abc]"; //表示 a 或 b 或c
System.out.println("a".matches(regex));
System.out.println("b".matches(regex));
System.out.println("c".matches(regex));
System.out.println("ab".matches(regex));
System.out.println("abc".matches(regex));
}
}
输出:
true
true
true
false
false
结论:[abc]表示匹配单个的a或者b或者c
2) [^abc]
package regex;
public class Demo1_Regex {
public static void main(String[] args) {
String regex = "[^abc]"; //表示除a b c之外任意字符
System.out.println("d".matches(regex));
System.out.println("中".matches(regex));
System.out.println("1".matches(regex));
System.out.println("y".matches(regex));
}
}
输出:
true
true
true
true
注意上面的是任意字符(char),也就是单个字符,不能是多个字符去匹配,多个就变成了字符串。
3)[a-zA-Z]
package regex;
public class Demo1_Regex {
public static void main(String[] args) {
String regex = "[a-zA-Z]"; //表示除a b c之外任意字符
System.out.println("a".matches(regex));
System.out.println("z".matches(regex));
System.out.println("h".matches(regex));
System.out.println("m".matches(regex));
System.out.println("A".matches(regex));
System.out.println("Z".matches(regex));
System.out.println("G".matches(regex));
System.out.println("K".matches(regex));
}
}
输出:
true
true
true
true
true
true
4)[a-d[m-p]]
表示字符a 到字符d 或者字符m到字符p范围的字符
package regex;
public class Demo1_Regex {
public static void main(String[] args) {
String regex = "[a-d[m-p]]"; //表示除a b c之外任意字符
System.out.println("a".matches(regex));
System.out.println("d".matches(regex));
System.out.println("m".matches(regex));
System.out.println("p".matches(regex));
System.out.println("q".matches(regex));
System.out.println("z".matches(regex));
}
}
输出结果:
true
true
true
true
false
false
5)[a-z&&[def]]
是指从a到z字符范围内和def三个中任意一个有交集的意思,相当于就是[def]的作用。
package regex;
public class Demo1_Regex {
public static void main(String[] args) {
String regex = "[a-z&&[def]]";
System.out.println("a".matches(regex));
System.out.println("d".matches(regex));
System.out.println("z".matches(regex));
}
}
输出结果:
false
true
false
6) [a-z&&[^bc]]
意思是a到z,除了b和c字符
package regex;
public class Demo1_Regex {
public static void main(String[] args) {
String regex = "[a-z&&[^bc]]";
System.out.println("a".matches(regex));
System.out.println("b".matches(regex));
System.out.println("c".matches(regex));
System.out.println("f".matches(regex));
System.out.println("z".matches(regex));
}
}
输出:
true
false
false
true
true
7)[a-z&&[^m-p]]
意思是,从a到z范围,不包括m到p范围的其他字符。
package regex;
publicclass Demo1_Regex {
publicstaticvoid main(String[] args) {
String regex = "[a-z&&[^m-p]]";
System.out.println("a".matches(regex));
System.out.println("m".matches(regex));
System.out.println("o".matches(regex));
System.out.println("p".matches(regex));
System.out.println("z".matches(regex));
}
}
输出:
true
false
false
false
true
总结:关于字符类的规则,要记住是指匹配单个字符,而不是多个。如果需要匹配字符或者字符范围,就需要想起字符类的这些正则表达式。