正则表达式可以校验字符串是否满足一定的规则,并用来校验数据格式的合法性;也可以在一段文本中查找满足要求的内容。
练习:
请编写正则表达式验证用户输入的手机号码是否满足要求。
请编写正则表达式验证用户输入的邮箱号是否满足要求。
请编写正则表达式验证用户输入的电话号码是否满足要求。
public class test {
public static void main(String [] arg) {
/*
* 验证手机号码 13112345678 13712345667 13945679027 139456790271
验证座机电话号码 020-2324242 02122442 027-42424 0712-3242434
验证邮箱号码 3232323@qq.com zhangsan@itcast.cnn d1ei0009@163.com dlei0009@pci.com.cn
*/
//手机号
//第一位只能为1
//第二位在3-9之间
//第三位及后面数字任意,后面数字正好9次
String regex1="1[3-9]\\d{9}";
System.out.println("01569875614".matches(regex1));
System.out.println("13112345678".matches(regex1));
System.out.println("139456790271".matches(regex1));
System.out.println("---------------------------");
//座机号
//区号:以0开头,从第二位是任意数字,可以出现2-3次
//-:可以出现或不出现
//号码:第一位不为零,长度5-10位
String regex2="0\\d{2,3}-?[1-9]\\d{4,9}";
System.out.println("020-2324242".matches(regex2));
System.out.println("0201256842324242".matches(regex2));
System.out.println("---------------------------");
//邮箱号码
//@左边:任意字符,至少出现一次
//@
//@右边:.的左边:任意字符取掉下划线,【2-6】
// .
// .的右边:大写字母,小写字母均可,2-3次
String regex3="\\w+@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2,3}){1,2}";
System.out.println("dlei0009@pci.com.cn".matches(regex3));
}
}
请编写正则表达式验证用户名是否满足要求。
要求:大小写字母,数字,下划线一共4-16位
请编写正则表达式验证身份证号码是否满足要求。
简单要求: 18位,前17位任意数字,最后一位可以是数字可以是大写或小写的x
复杂要求:按照身份证号码的格式严格要求。
public class test {
public static void main(String [] arg) {
String regex1="\\w{4,16}";
System.out.println("uds1568".matches(regex1));
System.out.println("lwx_15".matches(regex1));
System.out.println("------");
String regex2="[1-9]\\d{16}(\\d|x|X)";//简单身份证号
System.out.println("023456789951264878".matches(regex2));
System.out.println("12345678995126487x".matches(regex2));
System.out.println("12345678995126487X".matches(regex2));
System.out.println("------");
//复杂身份证
//第一位不能为0,后面五位任意数字
//年份:前半段:18,19,20;后两位任意
//月:01-09,11,12 (0[1-9]|1[12])
//日:01-31 ( 0[1-9]|[12]\\d|3[01])
//后三位任意,最后一位要么是数组要么是x或X
String regex3="[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|11|12)(0[1-9]|[12]\\d|3[01])\\d{3}(\\d|x|X)";
System.out.println("12345120890515487X".matches(regex3));
}
}
爬虫:在一段文本中查找满足要求的内容。
识别正则表达式的方法:replaceAll,split-——替换,分割
public class test {
public static void main(String [] arg) {
String s="张三1564李四48526王五448962";
String regex="\\d+";
String result=s.replaceAll(regex, "vs");
System.out.println(result);
String[] arr=s.split(regex);
for(int i=0;i<arr.length;i++) {
System.out.println(arr[i]);
}
}
}
分组:就是小括号,以左括号为基准,最左边为第一组,依次为第二组...
捕获分组练习:
\\组号:把第X组的内容再用一次
判断一个字符串的开始部分和结束部分是否一致?
public class test {
public static void main(String [] arg) {
//需求2:判断一个字符串的开始部分和结束部分是否一致?可以有多个字符
//举例:abc123abc b456b 123789123
String regex="(.+).+\\1";
//.表示任意字符
//+表示一个或多个
// \\组号:把第X组的内容再用一次
System.out.println("abc123abc".matches(regex));
System.out.println("abc123".matches(regex));
System.out.println("-------");
//需求3:判断一个字符串的开始部分和结束部分是否一致?开始部分内部每个字符也需要一致
//举例:aaa123aaa bbb456bbb
String regex1="((.)\\2\\2).+\\1";
System.out.println("aaa123aaa".matches(regex1));
System.out.println("aaa123aa".matches(regex1));
}
}