package Test; import java.util.regex.Matcher; import java.util.regex.Pattern; /* * 邮箱:@前面包含5-14位数字,字母下划线,@后面是qq,126,163,yahoo,gmail,sina,然后是com或者cn。 * 电话号码:11位数字,开头两位是13,15,16,17,18,19 * 身份证18位:5开头;第7、8位19或者20;第11位0或者1;第13位0或1或2或3;第18位可能为x * 域名:www开头,然后是个“.”,后面是数字或者字母或者下划线(不限长度),然后是“.”,com或者cn或者com.cn。 */ public class Test1 { public static void main(String[] args) { Pattern p1 = Pattern.compile("^\\w{5,14}@(qq|126|163|yahoo|gmail|sina)\\.(com|cn)$"); Matcher m1 = p1.matcher("[email protected]"); System.out.println(m1.matches()); Pattern p2 = Pattern.compile("^1(3|4|5|6|7|8)\\d{9}$"); Matcher m2 = p2.matcher("15623479501"); System.out.println(m2.matches()); Pattern p3 = Pattern.compile("^5\\d{5}(19|20)\\d{2}(0|1)\\d(0|1|2|3)\\d{4}(X|[0-9])$"); Matcher m3 = p3.matcher("54614719281231468X"); System.out.println(m3.matches()); Pattern p4 = Pattern.compile("^(WWW|www)\\.\\w{1,}\\.(com|cn|com.cn)$"); Matcher m4 = p4.matcher("www.dgjfgkhkg345476.com.cn"); System.out.println(m4.matches()); } }
1、 “.” “+” “?” “*” 等的匹配,在前面加 “\\”
2、 身份证里面日期的匹配有个小问题,比如 19900228,当月份为02时,日期不能超过28,其他月份也有类似限制,这在正则表达式里面有没有快捷的解决方案(除了逐月写出外)?
时间: 2024-10-12 14:01:08