加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

我学正则表达式——组(group)和回溯引用(backreference)

发布时间:2020-12-14 01:01:50 所属栏目:百科 来源:网络整理
导读:靓号的选择 人怕不动,脑怕不用。 一觉醒来,漫步到公司之后。项目经理又交来一个任务: “公司最近打算升级号码管理,针对VIP客户推出靓号服务,暂定靓号为6位,尾数AAAA的为靓号,比如118888是靓号。” 这个任务太简单了,不就是从0到9一直循环嘛,从00000

靓号的选择

人怕不动,脑怕不用。


一觉醒来,漫步到公司之后。项目经理又交来一个任务:
“公司最近打算升级号码管理,针对VIP客户推出靓号服务,暂定靓号为6位,尾数AAAA的为靓号,比如118888是靓号。”

这个任务太简单了,不就是从0到9一直循环嘛,从000000-009999,选取后四位相同的号码输出。

用9个正则表达式:
d{2}0{4}

...

d{2}9{4}

大功告成!我兴冲冲地用QQ向项目经理报告了这一成果,满怀期待的等着他的回复。

不料,一个 弹在了QQ对话框上,后面跟了句“000000”这种号码能用吗!!

我赶紧拿000000一测,还真能匹配。
唉。

又挨训了!好吧,换成
[1-9]d0{4}

再发过去,又换来一声叹息。“还能简单点吗,这有10个正则啊”。

百度,百度,再百度。


正则中的组和回溯引用

在正则表达式中,每个括号括起来的部分叫做一个组,比如表达式
(d{2})([a-z])
中,
组1为d{2}
组2为[a-z]
其中,还暗含了一个组0,即整个正则表达式。

以11abcd为例,如果我们采用上面的正则表达式,则
组1为11
组2为abcd

有了组的概念后,我们便可以利用这个组来做文章,比如,如果我们要找重复了两次的数字,如11,22,可以写这样的表达式:

(d)1

它的意思是,第一个是数字,第二个数字跟第一个数字相同。正则表达式中,用了一个专门的术语来描述1这种概念,即回溯引用。

再回到我们最初的问题,后四位号码相同,各位猜到怎么写了吗?

答案是:
[1-9]d(d)111
或者:
[1-9]d(d)1{3}

小结

在本文中,我们学习了()和回溯引用的用法:
  • ()用于把正则表达式分成匹配组
  • 回溯引用则使用了匹配组来进行再次匹配和过滤
注意:中文的()和英文的()是不同的,正则表达式必须用英文括号

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读