A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*写一个正则表达式,可以匹配尾号5连的手机号。
规则: 第1位是1,第二位可以是数字3458其中之一,后面4位任意数字,最后5位为任意相同的数字。
例如:18601088888、13912366666
*/


代码如下:
  1. //import java.util.*;
  2. class RegexDemo {
  3.         public static void main(String[] args) {
  4.                 Scanner sc = new Scanner(System.in);
  5.                 System.out.println("请输入一个11位手机号码:");
  6.                 String str = sc.nextLine();
  7.                 splitString(str);
  8.                
  9.         }
  10.        
  11.         }
  12.         public static void splitString(String str){
  13.                 //定义regex的规则
  14.                 String regex = "[1][3458]\\d{4}(\\d)\\1{4}";
  15.                 //将字符串用regex进行匹配
  16.                 boolean flag = str.matches(regex);
  17.                 //按返回结果给出提示
  18.                 if (flag){
  19.                         System.out.println("您输入的手机号符合要求!");
  20.                 }else{
  21.                         System.out.println("您输入的手机号不符合要求!");
  22.                 }
  23.         }
  24. }
  25. )
复制代码
下面我详细解释一下这个正则表达式:

[1]        //第一个数字是必须是 1
[3458]        //第二个数必须是3458中的一数字
\\d{4}        //这是一个整体,\\d 的意思是0-9其中的一个数字和[0-9]是同一个含义,{4}总共出现4次
(\\d)\\1{4}//()这个括号代表组的意思;
                组的概念是:比如在教室里上课,一排就是一组,放学的时候老师说,第一组留下来扫地,那么第一组的所有人都要留下来,
                也就是说这一排的人都要留下来。
(\\d)的意思就是我将\\d看作一个组,但是这个组是有顺序的,顺序按从前往后排
如:(\\d)([0-9])([1])
(\\d)是第一组
([0-9])是第二组
([1])就是第三组
如果是((())())这样的就看有几个做括号,就有几组;第几个左括号就是第几组
\\1 //意思是第一个“\”是转义字符,“\1”就是取第一组的意思
(\\d)\\1{4}\\完整的解释就是先从0-9中任意取一个数字,把这个数字看成一个组,因为只有一个组,所以他就是第一组,取第一组的值再重复出现四次。
如果你把上面这个正则表达式看懂了,恭喜你正则你已经学会了!


3 个回复

倒序浏览
正则表达式完全搞不懂
回复 使用道具 举报
还好。。。。。
回复 使用道具 举报
什么意思?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马