1 正则表达式-字符类
1.[abc]:代表a 或b 或c字符中的一个。
2.[^abc]:代表除了a b c以外的任何字符。
3.[a-z]:代表a-z的所有小写字符中的一个。
4.[A-Z]:代表A-Z的所有大写字符中的一个。
5.[0-9]:代表0-9之间的某一个数字
6.[a-zA-Z0-9]:代表a-z 或者A-Z 或者0-9之间的任意一个字符
7.[a-dm-p]:代表a到d或m到p之间的任意一个字符。
8.[a-z&&[def]]:代表a-z和def的交集,实际为def
9.[a-z&&[^def]]:代表a-z和非def的交集,等同于a-cg-z
示例代码如下:
public class RegexDemo1 {
public static void main(String[] args) {
//1.[abc]:代表a 或b 或c字符中的一个。
System.out.println("a".matches("[abc]"));//true
System.out.println("d".matches("[abc]"));//false
//2.[^abc]:代表除了a b c以外的任何字符。
System.out.println("a".matches("[^abc]"));//false
System.out.println("d".matches("[^abc]"));//true
//3.[a-z]:代表a-z的所有小写字符中的一个。
System.out.println("z".matches("[a-z]"));//true
System.out.println("A".matches("[a-z]"));//false
System.out.println("1".matches("[a-z]"));//false
//4.[A-Z]:代表A-Z的所有大写字符中的一个。
System.out.println("A".matches("[A-Z]"));//true
System.out.println("a".matches("[A-Z]"));//false
//5.[0-9]:代表0-9之间的某一个数字
System.out.println("1".matches("[0-9]"));//true
System.out.println("11".matches("[0-9]"));//false
//6.[a-zA-Z0-9]:代表a-z或者A-Z或者0-9之间的任意一个字符
System.out.println("c".matches("[a-zA-Z0-9]"));//true
System.out.println("D".matches("[a-zA-Z0-9]"));//true
System.out.println("8".matches("[a-zA-Z0-9]"));//true
System.out.println(".".matches("[a-zA-Z0-9]"));//false
//7.[a-dm-p]:代表a到d或m到p之间的任意一个字符。
System.out.println("c".matches("[a-dm-p]"));//true
System.out.println("e".matches("[a-dm-p]"));//false
//8.[a-z&&[def]]:代表a-z和def的交集,实际为def
System.out.println("a".matches("[a-z&&[def]]"));//false
System.out.println("e".matches("[a-z&&[def]]"));//true
System.out.println("9".matches("[a-z&&[0-8]]"));//false
//9.[a-z%&&[^def]]:代表a-z和非def的交集,等同于a-cg-z
System.out.println("b".matches("[a-z&&[^def]]"));//true
System.out.println("e".matches("[a-z&&[^def]]"));//false
}
}
2 正则表达式-逻辑运算符
1. &&:并且
2. | :或者
3. \:转义字符
代码实例:
public class Demo {
public static void main(String[] args) {
String str = "had";
//1.要求字符串是小写辅音字符开头,后跟ad
String regex = "[a-z&&[^aeiou]]ad";
System.out.println("1." + str.matches(regex));
//2.要求字符串是aeiou中的某个字符开头,后跟ad
regex = "[a|e|i|o|u]ad";//这种写法相当于:regex = "[aeiou]ad";
System.out.println("2." + str.matches(regex));
}
}
3 正则表达式-预定义字符
1.".":匹配任何字符
2."\d":匹配数字[0-9]的简写
3 "\D":匹配非数字[^0-9]的简写
4 "\s":空白字符:空格、制表符等
5."\S":非空白字符
6."\w":单词字符:[a-zA-Z_0-9]的简写,包括下划线
7."\W":非单词字符
示例代码
public class RegexDemo2 {
public static void main(String[] args) {
System.out.println("1------------------");
// 1.".":匹配任何字符
System.out.println("你".matches("."));//true
System.out.println("你".matches(".."));//false 一个.只匹配一个字符
System.out.println("你1".matches(".."));//true
System.out.println("2------------------");
// 2."\d":匹配数字[0-9]的简写
System.out.println("3".matches("\\d"));//true
System.out.println("a".matches("\\d"));//false
System.out.println("33".matches("\\d"));//false
System.out.println("33".matches("\\d\\d"));//true
// 3 "\D":匹配非数字[^0-9]的简写
System.out.println("3------------------");
System.out.println("你".matches("\\D"));//true
System.out.println("1".matches("\\D"));//false
// 4 "\s":空白字符:空格、制表符等
System.out.println("4------------------");
System.out.println(" ".matches("\\s"));//true
System.out.println("a".matches("\\s"));//true
// 5."\S":非空白字符
System.out.println("5------------------");
System.out.println(" ".matches("\\S"));//false
System.out.println("你".matches("\\S"));//true
// 6."\w":单词字符:[a-zA-Z_0-9]的简写,包括下划线
System.out.println("6------------------");
System.out.println("_".matches("\\w"));//true
System.out.println("-".matches("\\w"));//false
System.out.println("1".matches("\\w"));//true
System.out.println("A".matches("\\w"));//true
// 7."\W":非单词字符
System.out.println("7------------------");
System.out.println("我".matches("\\W"));//true
System.out.println("_".matches("\\W"));//false
System.out.println("-".matches("\\W"));//true
}
}
4 正则表达式-数量词
1.X?:0次或1次
2.X*:0次或多次
3.X+:1次或多次
4.X{n}:正好n次
5.X{n,}:至少n次
6.X{n,m}:n到m次(包含n和m)
示例代码
public class RegexDemo3 {
public static void main(String[] args) {
//必须是数字 字母 下划线 至少6位
System.out.println("1--------");
System.out.println("AD111_1_2".matches("\\w{6,}"));//true
System.out.println("a1d_".matches("\\w{6,}"));//false
//必须是数字和字符,必须是4位
System.out.println("2--------");
System.out.println("1a2c".matches("[\\w&&[^_]]{4}"));//true
System.out.println("12as".matches("\\w{4}"));//true
System.out.println("12asdd".matches("\\w{4}"));//false
//必须是数字和字符,4-6次
System.out.println("3--------");
System.out.println("12as".matches("\\w{4,6}"));//true
System.out.println("123456".matches("\\w{4,6}"));//true
System.out.println("111".matches("\\w{4,6}"));//false
}
}
5 练习
public class RegexDemo4 {
public static void main(String[] args) {
//1 验证手机号
//1开头,第二位3-9,后面9位是0-9任意数字
String phone_regex = "1[3-9]\\d{9}";
System.out.println("15702153685".matches(phone_regex));//true
System.out.println("25702153685".matches(phone_regex));//false
System.out.println("12702153685".matches(phone_regex));//false
System.out.println("147021536851".matches(phone_regex));//false
//邮箱号码
//3232323@qq.com dlei0009@163.com dlei0009@pci.com.cn
//思路:
//在书写邮箱号码正则的时候需要把正确的数据分为三部分
//第一部分:@的左边 \\w+
// 任意的字母数字下划线,至少出现一次就可以了
//第二部分:@ 只能出现一次
//第三部分:
// 3.1 .的左边[\\w&&[^_]]{2,6}
// 任意的字母加数字,总共出现2-6次(此时不能出现下划线)
// 3.2 . \\.
// 3.3 大写字母,小写字母都可以,只能出现2-3次[a-zA-Z]{2,3}
// 我们可以把3.2和3.3看成一组,这一组可以出现1次或者两次
String regex3 = "\\w+@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2,3}){1,2}";
System.out.println("3232323@qq.com".matches(regex3));//true
System.out.println("zhangsan@itcast.cnn".matches(regex3));//true
System.out.println("dlei0009@163.com".matches(regex3));//true
System.out.println("dlei0009@pci.com.cn".matches(regex3));//true
}
}