• 技术文章 >后端开发 >php教程

    正则表达式验证IPV4地址功能实例分析

    小葫芦小葫芦2017-01-22 14:10:40原创682
    本文实例讲述了正则表达式验证IPV4地址功能。分享给大家供大家参考,具体如下:

    IPV4地址由4个组数字组成,每组数字之间以.分隔,每组数字的取值范围是0-255。

    IPV4必须满足以下四条规则:

    1、任何一个1位或2位数字,即0-99;
    2、任何一个以1开头的3位数字,即100-199;
    3、任何一个以2开头、第2位数字是0-4之间的3位数字,即200-249;
    4、任何一个以25开头,第3位数字在0-5之间的3位数字,即250-255。

    这样把规则全部罗列出来之后,构造一个正则表达式的思路就清晰了。

    首先满足第一条规则的正则是:\d{1,2}
    首先满足第二条规则的正则是:1\d{2}
    首先满足第三条规则的正则是:2[0-4]\d
    首先满足第四条规则的正则是:25[0-5]

    把它们组合起来,就得到一个匹配0-255数字的正则表达式了:

    (\d{1,2})|(1\d{2})|(2[0-4]\d)|( 25[0-5])

    IPV4由四组这样的数字组成,中间由.隔开,或者说由三组数字和字符.和一组数字组成,所以匹配IPV4的正则表达式如下:

    (((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))

    Java测试代码如下:

    public static void matchAndPrint(String regex, String sourceText){
      Pattern pattern = Pattern.compile(regex);
      Matcher matcher = pattern.matcher(sourceText);
      while(matcher.find()){
        System.out.println(matcher.group());
      }
    }
    public static void main(String[] args) {
      String regex = "^(((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))\\.){3}((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))$";
      matchAndPrint(regex, "23.135.2.255");
      matchAndPrint(regex, "255.255.0.256");
      matchAndPrint(regex, "0.0.0.0");
    }

    输出结果如下:

    23.135.2.255
    0.0.0.0

    这个正则有一个缺陷,就是如果不使用边界匹配的话,像第二个测试IP 255.255.0.256也会被匹配到,匹配到的结果是255.255.0.25。可以添加限制条件,前后要么是边界,要么是非数字,并且使用前后查找(lookaround),前后查找将在后面介绍。即:

    (?<=(\\b|\\D))(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))(?=(\\b|\\D))

    String regex = "(?<=(\\b|\\D))(((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))\\.){3}((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))(?=(\\b|\\D))";

    这样即可解决这个问题。

    希望本文所述对大家正则表达式学习有所帮助。

    更多正则表达式验证IPV4地址功能实例分析相关文章请关注PHP中文网!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:正则表达式 验证
    上一篇:Powershell-使用正则表达式查找文件 下一篇:正则表达式教程之子表达式用法分析
    大前端线上培训班

    相关文章推荐

    • PHP中的命名空间定义与使用(实例详解)• PHP中clone关键字和__clone()方法的使用(实例详解)• 带你分清类中的构造函数与析构函数• 五分钟带你了解PHP中的魔术方法(实例详解)• 怎样去搞定PHP类的继承?(总结分享)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网