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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冯安宇 中级黑马   /  2013-7-10 16:19  /  1753 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 冯安宇 于 2013-7-11 12:18 编辑

写一个正则表达式,可以匹配尾号5连的手机号。规则: 第1位是1,第二位可以是数字3458其中之一,后面4位任意数字,最后5位为任意相同的数字。
例如:18601088888、13912366666
正则表达式我略懂一些,但是感觉这道题好复杂啊,所以来到论坛想请教一下各位。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

13 个回复

倒序浏览
String regex = "[1][3458][\\d]{4}(\\d){5}";
回复 使用道具 举报
  1. String tel = "16900001111";
  2.                 String telReg = "1[3458]\\d{4}\\d+{7,12} ";
  3.                 System.out.println(tel.matches(telReg))
复制代码
十分不确定是否正确……
回复 使用道具 举报
/1[3458]\d{4}(\d)\1{4}/
回复 使用道具 举报
王靖远 发表于 2013-7-10 16:30
String regex = "[1][3458][\\d]{4}(\\d){5}";

String regex = "[1][3458][\\d]{4}(\\d)\\1{4}";
之前的写错了不好意思
回复 使用道具 举报
hx32 发表于 2013-7-10 16:31
十分不确定是否正确……

好吧,我去试试,谢谢回复。
回复 使用道具 举报
王靖远 发表于 2013-7-10 17:28
String regex = "[1][3458][\\d]{4}(\\d)\\1{4}";
之前的写错了不好意思

谢谢你的回复,我看到你和楼上的表达式差不多,不过你多了个“\”,难道“\\”和“\”有不同的含义吗?
回复 使用道具 举报

谢谢回复,我会拿去试试的。
回复 使用道具 举报
冯安宇 发表于 2013-7-10 17:44
谢谢你的回复,我看到你和楼上的表达式差不多,不过你多了个“\”,难道“\\”和“\”有不同的含义吗? ...

多因为有一个\是转义的意思 所以要多写一个\表达原本意思
回复 使用道具 举报
冯安宇 发表于 2013-7-10 17:45
谢谢回复,我会拿去试试的。

我仅仅用的工具,设计到转义就是具体语言的实现了,但是正则就是那样写,比如java里的\\表达的就是\的意思,对吧,我相信你能理解的

TM截图20130711075101.png (9.55 KB, 下载次数: 0)

TM截图20130711075101.png
回复 使用道具 举报 1 0
二楼的正则表达式是正确的,测试程序如下:
  1. public class RegexAsk
  2. {       
  3.         public static void main(String[] args)
  4.         {
  5.                 String tel = "13939088888";
  6.                 String telReg = "[1][3458][\\d]{4}(\\d){5}";
  7.                 System.out.println(tel.matches(telReg));

  8.         }

  9. }
复制代码
结果为:true

[1]: 表示该位上是数字1
[3458]:表示该位上是数字3或者5或者4或者8
[\\d]{4}: \d表示该位上的数字是0-9中的任意一个,由于在正则表达式中\是特殊字符,要向让它成为普通字符,需要在其前面加上转义字符\,因此此处出现了两个\,{4}指的是连续4位上都符合规则\d。
(\\d){5} : ()表示将括号内的规则封装成  组, 封装它是为了在后面重用,{5}表示组中的规则被重用了5次。

评分

参与人数 1技术分 +1 收起 理由
夜默 + 1

查看全部评分

回复 使用道具 举报
String regex = "[1][3458][\\d]{4}(\\d)\\1{4}";
(\\d)\\1:\1表示的是在该位上引用组中的规则,{4}表示连续后4位都沿用\1的规则。

这两个正则表达式都能通过测试。
回复 使用道具 举报
changweihua 发表于 2013-7-11 07:53
我仅仅用的工具,设计到转义就是具体语言的实现了,但是正则就是那样写,比如java里的\\表达的就是\的意 ...

谢啦~,非常有用
回复 使用道具 举报
牛海亮 发表于 2013-7-11 10:16
二楼的正则表达式是正确的,测试程序如下:结果为:true

[1]: 表示该位上是数字1

解释的非常清楚,谢谢了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马