zoukankan      html  css  js  c++  java
  • 正则表达式入门(3)

    示例3

    匹配IP地址

    ip地址格式由4个0-255之间的数字中间"."隔开

    "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"

    这样貌似是可行,但是有个问题,这样可以匹配256-999之间的值,是不合法的

    稍微改一下

    "(25[0-5]|2[0-4]\d|[01]?\d\d?)(\.(25[0-5]|2[0-4]\d|[01]?\d\d?)){3}"

    1-255的正则如下

    "25[0-5]|2[0-4]\d|[01]?\d\d?"

    250-255比较特殊,个位只能取0-5,所以正则是"25[0-5]"

    然后是200-249 得到 "2[0-4]\d"

    最后是0-199 百位是0,1 可以写成"[01]",当然百位的0也可以不写 "[01]?"

    加上个位和百位得到 "[01]?\d\d?",拼起来,就完成了

    这么写可以匹配IP地址,但也会把类似723.81.1.2000这样的字符串匹配出来 得到23.81.1.200,不过好像不是我们想要的,可能根本就不是一个ip

    再次修改,得到表达式 "(?<!\d)(25[0-5]|2[0-4]\d|[01]?\d\d?)(\.(25[0-5]|2[0-4]\d|[01]?\d\d?)){3}(?!\d)"

    可以看到变动,在前面加了"(?<!\d)"后面加了"(?!\d)",

    这是一个 环视(lookaround)

    "(?<!\d)"的含义是 左边不能是数字

    "(?!\d)"则是右边不能是数字

    环视一共有4种类型

    ?<={表达式}    左侧必须匹配{表达式}

    ?<!{表达式}     左侧不能匹配{表达式}

    ?={表达式}      右侧必须匹配{表达式}

    ?!{表达式}       右侧不能匹配{表达式}

    环视本身不会匹配任何字符

    上面的例子,如果把规则改为 匹配  ip:{ip} 这样的形式,但是只要取出ip

    那只要改成

    "(?<=ip:)(25[0-5]|2[0-4]\d|[01]?\d\d?)(\.(25[0-5]|2[0-4]\d|[01]?\d\d?)){3}(?!\d)"

  • 相关阅读:
    微信下载远程图片的公用方法
    微信接口调用
    微信
    post方法
    asp.net pagebase获取缓存的方法
    sql查询最大id
    Controller里写自己需要的Action,参数的名字必须和路由设置的参数名一致

    递归调用
    队列及其应用
  • 原文地址:https://www.cnblogs.com/afox/p/3526406.html
Copyright © 2011-2022 走看看