黑马程序员技术交流社区

标题: 一道关于正则表达式的题 [打印本页]

作者: 冯安宇    时间: 2013-7-10 16:19
标题: 一道关于正则表达式的题
本帖最后由 冯安宇 于 2013-7-11 12:18 编辑

写一个正则表达式,可以匹配尾号5连的手机号。规则: 第1位是1,第二位可以是数字3458其中之一,后面4位任意数字,最后5位为任意相同的数字。
例如:18601088888、13912366666
正则表达式我略懂一些,但是感觉这道题好复杂啊,所以来到论坛想请教一下各位。
作者: 王靖远    时间: 2013-7-10 16:30
String regex = "[1][3458][\\d]{4}(\\d){5}";
作者: hx32    时间: 2013-7-10 16:31
  1. String tel = "16900001111";
  2.                 String telReg = "1[3458]\\d{4}\\d+{7,12} ";
  3.                 System.out.println(tel.matches(telReg))
复制代码
十分不确定是否正确……
作者: changweihua    时间: 2013-7-10 17:21
/1[3458]\d{4}(\d)\1{4}/
作者: 王靖远    时间: 2013-7-10 17:28
王靖远 发表于 2013-7-10 16:30
String regex = "[1][3458][\\d]{4}(\\d){5}";

String regex = "[1][3458][\\d]{4}(\\d)\\1{4}";
之前的写错了不好意思
作者: 冯安宇    时间: 2013-7-10 17:42
hx32 发表于 2013-7-10 16:31
十分不确定是否正确……

好吧,我去试试,谢谢回复。
作者: 冯安宇    时间: 2013-7-10 17:44
王靖远 发表于 2013-7-10 17:28
String regex = "[1][3458][\\d]{4}(\\d)\\1{4}";
之前的写错了不好意思

谢谢你的回复,我看到你和楼上的表达式差不多,不过你多了个“\”,难道“\\”和“\”有不同的含义吗?
作者: 冯安宇    时间: 2013-7-10 17:45
changweihua 发表于 2013-7-10 17:21
/1[3458]\d{4}(\d)\1{4}/

谢谢回复,我会拿去试试的。
作者: 王靖远    时间: 2013-7-10 17:58
冯安宇 发表于 2013-7-10 17:44
谢谢你的回复,我看到你和楼上的表达式差不多,不过你多了个“\”,难道“\\”和“\”有不同的含义吗? ...

多因为有一个\是转义的意思 所以要多写一个\表达原本意思
作者: changweihua    时间: 2013-7-11 07:53
冯安宇 发表于 2013-7-10 17:45
谢谢回复,我会拿去试试的。

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

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

TM截图20130711075101.png

作者: 牛海亮    时间: 2013-7-11 10:16
二楼的正则表达式是正确的,测试程序如下:
  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次。

作者: 牛海亮    时间: 2013-7-11 10:24
String regex = "[1][3458][\\d]{4}(\\d)\\1{4}";
(\\d)\\1:\1表示的是在该位上引用组中的规则,{4}表示连续后4位都沿用\1的规则。

这两个正则表达式都能通过测试。
作者: 冯安宇    时间: 2013-7-11 12:19
changweihua 发表于 2013-7-11 07:53
我仅仅用的工具,设计到转义就是具体语言的实现了,但是正则就是那样写,比如java里的\\表达的就是\的意 ...

谢啦~,非常有用
作者: 冯安宇    时间: 2013-7-11 12:19
牛海亮 发表于 2013-7-11 10:16
二楼的正则表达式是正确的,测试程序如下:结果为:true

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

解释的非常清楚,谢谢了。




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