【正则表达式入门】第五节——子表达式

在本节开头,首先引出一个使用场景:
在一篇文章中,你想对由多个单词组成的整体进行匹配。即想对两个连续出现的单词,进行匹配。按照之前的思路,我们可能采用[/w]*这种语法来尝试进行正则表达式的设计。

但由于之前提到的使用元字符以及常见的重复匹配的语法等,只能对单一的结构来进行匹配,当面临对一个复杂结构,里面包含各种字符,原有的元字符不能很好的进行匹配,这时候引出“组”的概念,也就是子表达式。

子表达式,也就是对表达式进行分组和归类,然后可以对其所构成的“组”,进行整体性操作。

子表达式

使用()来包裹子表达式。

正则表达式:
(10.10){2}

表示要匹配两个连续的10.10,其中{2}表示重复两次,()包裹的子表达式表示要匹配的内容。

在这里插入图片描述

根据上图结果显示,在这段长字符串中,虽然也存在10.10,但是正则表达式并未进行匹配,只匹配到了两个连续的10.10,作为匹配结果。

子表达式的嵌套

子表达式允许进行嵌套,虽然使用子表达式后,正则表达式可能看起来晦涩难懂,但是只要按照对应的语法对正则表达式进行划分,也能很好的理解其想表达的意思。

在这里,对在编程中经常遇到的日期、时间类型,通过使用子表达式的方式来很好的进行展示。

首先使用多个子表达式对日期类型的匹配。

正则表达式:
(\d{4}/)(\d{2}/)(\d{2})

上面的表达式中,使用了三个子表达式。其中第一个子表达式表示,对重复出现4次的数字,以及符号/进行匹配。第二个表达式表示,对重复出现2次的数字,以及符号/进行匹配。第三个表达式表示,只对对重复出现2次的数字进行匹配。

在这里插入图片描述

根据上图结果显示,正则表达式匹配到了全文中以yyyy/mm/dd格式的日期。

现在使用子表达式嵌套的方式,来对hh:mm:ss的时间格式进行匹配。

正则表达式:
((\d{2}:){2}\d{2})

现在对上面设计的正则表达式进行拆解,由于要匹配的时间是hh:mm:ss格式,在设计上,将hh:作为子表达式,并将其进行两次重复匹配。转换成正则表达式,即(\d{2}:){2}
由于最后还剩下ss未进行匹配,这里我们在刚才的正则表达式后,再添加\d{2}表示要对整体的hh:mm:ss格式进行匹配。最后再用()来包裹,组成一个新的子表达式,也就是((\d{2}:){2}\d{2})

在这里插入图片描述

根据上图结果显示,在全文中,设计的正则表达式匹配到了hh:mm:ss格式的时间。

本节测试用例

cat
category
cat. X 10.9 Maverick

cat X 10.1010.10 Yosemite
cat1 X 10.10 Yosemite
cat2 X 10.10 Yosemite
Cat X 10.11 A Capita
category 10.12 Sierra
Category 10.13 Moj_
acat
<cat>A</cat>ads<cat>B</cat>
cat cat
1989-04-05
2000-02-14
Date 2023/03/21 10:20:23
Date 1937/02/23 09:21:34

「参考」
《正则表达式必知必会》

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值