一个正则表达式问题

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


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

if (#host ~* "(?:(\w+.){0,1})(\b(?!www\b)\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。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值