正则表达式(捕获组和非捕获组)

数量词 X? X,一次或一次也没有 X* X,零次或多次 X+ X,一次或多次 X{n} X,恰好 n 次 X{n,} X,至少 n 次 X{n,m} X,至少 n 次,但是不超过 m 次 如果要对一段字符进行重复,就需要有用到分组,分组在正则中用"()"表示.然后后面可以对这个组进行重复 引用.例如(123) 123就是一个组. 分组有两种概念,非捕获组和捕获组 捕获组 ( ) 每一个捕获组都会有编号,这个编号是从左至右通过括号来计算的.例如 (A(B)(CD)) 第1组:(A(B)(CD)) 第2组:(B) 第3组:(CD)

在正则表达式中可以对捕获组进行引用。

下面写一个对捕获组进行引用的例子 选取靓号 数字全部相同的号码(AAAAAA) (\d)\1{6,} 首先会获取第一位为0-9的数字,然后\1引用第一组里面内容然后重复6次或者6次以上.

说明 每一对括号会分配一个编号,使用 () 的捕获根据左括号的顺序从 1 开始自动编号。捕获元素编号为零的第一个捕获是由整个正则表达式模式匹配的文本。 非捕获组(?:xxx)

以 (?) 开头的组是纯的非捕获 组,它不捕获文本 ,也不针对组合计进行计数。就是说,如果小括号中以?号开头,那么这个分组就不会捕获文本,当然也不会有组的编号,因此后面也不能引用。

表达式 方向 说明 (?=xxx) 正向预搜索(向右) 正向预搜索,判断当前位置右侧是否能匹配指定表达式 (?!xxx) 正向预搜索(向右) 正向预搜索否定,判断当前位置右侧是否不能够匹配指定表达式 (?<=xxx) 反向预搜索(向左) 反向预搜索,判断当前位置左侧是否能够匹配指定表达式 (?<!xxx) 反向预搜索(向左) 反向预搜索否定,判断当前位置左侧是否不能够匹配指定表达式

与普通分组不同的是,非捕获组不记录所匹配的内容,比普通分组更节约内存资源。 例子:

  1. (?<=2)88(?<!3) 88前面是2后面不能是3 2884 匹配 3882 不匹配

转载于:https://my.oschina.net/axes/blog/98325

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值