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

正则表达式中的(?:exp)这样匹配表达式,有什么意义

发布时间:2020-12-14 01:40:25 所属栏目:百科 来源:网络整理
导读:(?:exp) 非捕获组,匹配exp的内容,但不捕获到组里 至于作用,一般来说是为了节省资源,提高效率 比如说验证输入是否为整数,可以这样写 ^([1-9][0-9]*|0)$ 这时候我们需要用到()来限制“|”表示“或”关系的范围,但我们只是要判断规则,没必要把exp匹配的
(?:exp) 非捕获组,匹配exp的内容,但不捕获到组里

至于作用,一般来说是为了节省资源,提高效率
比如说验证输入是否为整数,可以这样写

^([1-9][0-9]*|0)$
这时候我们需要用到()来限制“|”表示“或”关系的范围,但我们只是要判断规则,没必要把exp匹配的内容保存到组里,这时就可以用非捕获组了
^(?:[1-9][0-9]*|0)$
以上只是一个简单的例子,或许会觉得无所谓,但是如下的日期正则,如果全都用捕获组,那就是对资源的极大浪费了

^(?:(?:(?:(?:(?:1[6-9]|[2-9]d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))([-/.])(?:0?21(?:29)))|(?:(?:(?:1[6-9]|[2-9]d)?d{2})([-/.])(?:(?:(?:0?[13578]|1[02])2(?:31))|(?:(?:0?[13-9]|1[0-2])2(29|30))|(?:(?:0?[1-9])|(?:1[0-2]))2(?:0?[1-9]|1d|2[0-8]))))$

有的时候我们不得不用(),而()默认情况下会将其中exp匹配的内容捕获到组里,而有些情况我们只是判断规则,或者后面并不需要对此处()中匹配的内容进行引用时,就没有必要把它捕获到组里了,一方面会造成资源的浪费,另一方面会降低效率,这时候就要用到非捕获组了。


(ps:这位大神已经做出了很清楚详细的解释了,一个大字:赞呀!!!)

(编辑:李大同)

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

    推荐文章
      热点阅读