正则表达式中查找"不包含"

         今天为网站伪静态写一条规则,目的是过滤除了站点本身以外的域名地址。由于网站做了泛域名解析,所以输入IP地址,或者其它人把域名绑定到服务器的IP,都可以访问网站,今天就发现了一个域名,估计是好久没有用到了,一直就是解析这个IP,于是输入域名就到了网站,解决的方法就是在伪静态规则中把“除了网站域名以外的其它域名均过滤掉”。

        先写出“本站允许的所有域名”吧,用正则表达式,只要包含主要的域名就行了。前面可以是二级子域名,于是写成:

/w+/.k8008/.com/.cn

    后缀扩展一下,就成下面这样,允许有多个后缀,这样可以是.com或者.net,.com.cn之类的了

/w+/.k8008(/./w+)+

     然后来转换成不含"k8008"的,这要用到正向预查了,"?="表示等于,“?!”表示不等于;要特别注意的是,预查后的位置,还是停留在预查之前,而不是从查完的字符开始找:

/w+/.(?!k8008)(/./w+)+

上面这个在查完k8008后,位置是停留在“(?!”之前的“/.”,再接着找的是(?!k8008)后面的“/.”,其实并没有哪个域名会两个点号相连的,所以出错,得不到任何结果。于是在重读正则手册N+1次后,终于写了下面这句:

/w+(?!/.k8008)(/./w+)+

 

非常简单,只需要把"/."移到预查里面就行了,最后加上边界条件,得到最终结果:

^/w+(?!/.k8008)(/./w+)+$

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值