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

一个正则表达式问题

发布时间:2020-12-14 00:55:56 所属栏目:百科 来源:网络整理
导读:(?:(w+.){0,1})(b(?!wwwb)w+).b(?!(com|org|gov|net|cn)b)w+.w+ 一个网友问的问题,稍微有点复杂。 主要其实就是?: 和?! ?: 是一个group construct,组构造。 参与匹配是肯定的,但是不会参与组计数。 也就是也许后续你可能会用 12 来表示某个g

(?:(w+.){0,1})(b(?!wwwb)w+).b(?!(com|org|gov|net|cn)b)w+.w+
一个网友问的问题,稍微有点复杂。
主要其实就是?: 和?!


?:是一个group construct,组构造。
参与匹配是肯定的,但是不会参与组计数。
也就是也许后续你可能会用12来表示某个group时(?:)中的这一块将无法被引用到。同时也看到这个组的官方术语是non-capturing group。很多代码在进行匹配成功后,是能通过$1,$2在代码逻辑中被引用的,所以你引用的序号自然就需要把non-capturing group排除掉。比如:

if (#host ~* "(?:(w+.){0,1})(b(?!wwwb)w+).b(?!(com|org|gov|net|cn)b)w+.w+" ) {
set #subdomain "/$2"
}


其实(?!)的含义也是group,只是含义刚好相反,不能是某个字串。
单个字符有取反[^abc]
但是(?!abc)有点特殊的是,一般都需要前面有东西匹配到。
比如looks(?!good)就不能匹配”looksgood”中的”looks”。
如果只是写(?!good) 不会匹配到任何字符串。
同样不允许匹配的字串可以有多个:
iam(?!looks|good)就不能匹配到”iamlooksgood”中的iam。

(编辑:李大同)

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

    推荐文章
      热点阅读