黑马程序员技术交流社区

标题: 黑马基础测试题,匹配手机号 [打印本页]

作者: 孟卫严    时间: 2015-7-11 12:56
标题: 黑马基础测试题,匹配手机号
/*写一个正则表达式,可以匹配尾号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中任意取一个数字,把这个数字看成一个组,因为只有一个组,所以他就是第一组,取第一组的值再重复出现四次。
如果你把上面这个正则表达式看懂了,恭喜你正则你已经学会了!



作者: 游呤人    时间: 2015-7-11 13:03
正则表达式完全搞不懂
作者: 靳小龙    时间: 2015-9-7 23:59
还好。。。。。
作者: wyd1    时间: 2015-9-8 00:24
什么意思?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2