全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

正则表达式匹配IP的表达式(推荐)

这里给大家详细讲解一下一个匹配IP地址的正则表达式,

  有关正则方面的知识,会在详细的讲解中提到。

  在讲解之前,我先给大家介绍一下,ip地址的生成规则。

  IP地址,是由32位数字二进制转为四个十进制的字符串组成。

  怎么转化?下面讲解:

      二进制:11111111111111111111111111111111

      分为四部分:11111111.11111111.11111111.11111111

      转化:2^7+2^6+2^5+2^4+2^3+2^2+2^1+2^0=255

      转为十进制范围:0~255.0~255.0~255.0~255

      这就是IP地址的范围。

      根据这个生成IP的规则和范围,我们可以用正则表达式来匹配出IP地址,但怎么匹配呢?各人有各人的方法,这里我讲解一下我的思路。

      根据IP地址的字符串规律,我把匹配IP地址的表达式分为两部分来考虑。

      第一部分:匹配3个0~255.(注意后面的一个点)

      第二部分:匹配最后的数字0~255

      也就是说,先匹配出 0~255.(注意后面的一个点) 这个字符串,然后重复匹配3次,然后再匹配最后的数字部分0~255。这就是我匹配IP地址的思路。

       首先,我要提一下,正则是没有办法做数字运算的,所以,我们无法用数字运算的方式筛选出IP的数字范围。既然没法用数字运算的方式筛选出IP的数字范围,那么我们应该用什么其他方式来筛选这个数字范围呢?我的思路是分组讨论,然后再把这些分组合并起来组成IP的数字范围。

       ①、假设IP的数字是百位数,那么根据IP的数字范围,我们可以得出下面几种情况。假设第一个数字为1,那么这个数字的范围就为1[0-9][0-9]。这个应该不难理解,就不解释。

      ②、假设第一个数字为2,那么根据IP数字的范围规则,这里又要分为两种情况,为什么?你想想,最大数字是255,当十位数为5时,个位数最大只能为5是吧?而当十位数为0到4时,个位数可以是任意数字对吧?

      所以,这里的两种情况分别为:

           A、2[0-4][0-9]

           B、25[0-5]

       ③、分析完了百位数的情况,接下来就是十位数的情况了,假如是十位数,那么十位数的前面第一个数不能为零是吧?

所以十位数的情况可以是:[1-9][0-9]

       ④、剩下的就是个位数的情况了,个位数的情况,大家应该很容易得出结论,就是:[0-9]。

       四种情况分析下来,我们得出了IP数字的范围分组为:

        1[0-9][0-9]

        2[0-4][0-9]

        25[0-5]

        [1-9][0-9]

        [0-9]

       怎么把上面的分组用正则表达式表示出来呢?很简单,用正则的或符号|和分组符号()就可以了,所以上面的分组正则表达式为:

     (1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])|([1-9][0-9])|([0-9])

        写到这里,数字的匹配范围正则表达式已经写好了,那么根据我前面的思路: 第一部分:匹配3个0~255.(注意后面的一个点)

         第二部分:匹配最后的数字0~255

        我们来匹配IP地址的第一部分,正则表达式如下: 

     (1[0-9][0-9]\.)|(2[0-4][0-9]\.)|(25[0-5]\.)|([1-9][0-9]\.)|([0-9]\.)

   我在每个数字的后面加了一个点就是匹配出0~255.(注意后面的一个点)

         那么怎么重复匹配三次呢?很简单,我们只要把这五个分组当成整体,再重复匹配三次就行了,正则表达式如下: 

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

         第一部分已经匹配出来了,接下来就是拼接上第二部分的数字了,数字部分上面已经写得很清楚了,就不再解释了,下面是完整的正则表达式:

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

      写到这里,正则匹配IP的表达式已经出来了,不过,这并不是最终的匹配IP的正则表达式,为什么呢?很简单,正则表达式会对每一个分组都进行捕获匹配,上面把匹配IP分成了那么多分组,而每一个分组的内容都会被正则所捕获,那上面不知道已经捕获多少IP了,呵呵,那么怎么去掉分组的内容呢?很简单,用这个符号?:

      ?:符号放在()圆括号里面,是捕获分组,但不捕获正则表达式的内容的意思。那么,我们把它放到每一个分组里面去,不就去掉了分组的内容了吗?所以,我们还要给每个分组加上?:,加上后正则如下:

(?:(?:1[0-9][0-9]\.)|(?:2[0-4][0-9]\.)|(?:25[0-5]\.)|(?:[1-9][0-9]\.)|(?:[0-9]\.)){3}(?:(?:1[0-9][0-9])|(?:2[0-4][0-9])|(?:25[0-5])|(?:[1-9][0-9])|(?:[0-9]))

    即使到这里,还是没有把IP地址匹配出来,我们还要用^和$来限制字符串的开头和结尾,所以,最后的匹配IP地址的正则表达式是:

^(?:(?:1[0-9][0-9]\.)|(?:2[0-4][0-9]\.)|(?:25[0-5]\.)|(?:[1-9][0-9]\.)|(?:[0-9]\.)){3}(?:(?:1[0-9][0-9])|(?:2[0-4][0-9])|(?:25[0-5])|(?:[1-9][0-9])|(?:[0-9]))$

    这就是我匹配IP地址最完整的正则表达式,大家可以借鉴一下,有什么bug还望读者提出,免得误导其他读者。

    上面的正则表达式的()括号都是成对出现的,假如有不成对出现,请读者自己添加一下,可能是我漏写了。

    下面是我的测试:

<?php
$pattern = '/^(?:(?:2[0-4][0-9]\.)|(?:25[0-5]\.)|(?:1[0-9][0-9]\.)|(?:[1-9][0-9]\.)|(?:[0-9]\.)){3}(?:(?:2[0-5][0-5])|(?:25[0-5])|(?:1[0-9][0-9])|(?:[1-9][0-9])|(?:[0-9]))$/';
//正则匹配ip地址
$ip     = '254.21.0.198';
preg_match($pattern,$ip,$out);
echo '<pre>';
print_r($out);
$ip     = '255.777.0.198';
preg_match($pattern,$ip,$out);
print_r($out);
$ip     = '07.25.8.198';
preg_match($pattern,$ip,$out);
print_r($out);
$ip     = '1207.25.8.198';
preg_match($pattern,$ip,$out);
print_r($out);
$ip     = 'qq107.25.8.198';
preg_match($pattern,$ip,$out);
print_r($out);
$ip     = '\.\.\.107.25.8.198';
preg_match($pattern,$ip,$out);
print_r($out);
$ip     = '\.\.\.  7.25.8.198';
preg_match($pattern,$ip,$out);
print_r($out);
$ip     = '107.25.8.19822vvv';
preg_match($pattern,$ip,$out);
print_r($out);
$ip     = '107.25.r8.1982';
preg_match($pattern,$ip,$out);
print_r($out);
$ip     = '107.225.8.19';
preg_match($pattern,$ip,$out);
print_r($out);
$ip     = '225.225.225.225';
preg_match($pattern,$ip,$out);
print_r($out);
$ip     = '0.0.0.0';
preg_match($pattern,$ip,$out);
print_r($out);
$ip     = '00.0.0.0';
preg_match($pattern,$ip,$out);
print_r($out);
$ip     = '0.202.1.0';
preg_match($pattern,$ip,$out);
print_r($out);
$ip     = '0.202.1.226';
preg_match($pattern,$ip,$out);
print_r($out);
$ip     = '249.202.1.0';
preg_match($pattern,$ip,$out);
print_r($out);
$s='';
for($i=0;$i<32;$i++){
  $s .= '1';
}
echo $s;
echo strlen($s);


# 正则表达式匹配ip  # IP地址正则表达式匹配方法  # 匹配 IP 地址与域名的正则表达式  # JavaScript正则表达式的分组匹配详解  # javascript中匹配价格的正则表达式  # javascript正则表达式模糊匹配IP地址功能示例  # Javascript中正则表达式的全局匹配模式分析  # Javascript中使用exec进行正则表达式全局匹配时的注意事项  # javascipt匹配单行和多行注释的正则表达式  # 正则表达式匹配ip地址超详细讲解  # 正则表达式  # 很简单  # 第一部分  # 第二部分  # 两种  # 给大家  # 写到  # 这就是我  # 数为  # 百位  # 都是  # 有什么  # 我要  # 出来了  # 我在  # 成了  # 好了  # 放在  # 出了  # 就不 


相关文章: 太平洋网站制作公司,网络用语太平洋是什么意思?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  建站之星如何防范黑客攻击与数据泄露?  三星网站视频制作教程下载,三星w23网页如何全屏?  如何获取开源自助建站系统免费下载链接?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  名字制作网站免费,所有小说网站的名字?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  个人摄影网站制作流程,摄影爱好者都去什么网站?  如何在万网自助建站平台快速创建网站?  大型企业网站制作流程,做网站需要注册公司吗?  如何选择高效稳定的ISP建站解决方案?  北京企业网站设计制作公司,北京铁路集团官方网站?  建站之星在线客服如何快速接入解答?  如何在云主机上快速搭建多站点网站?  香港服务器租用每月最低只需15元?  网站制作的步骤包括,正确网址格式怎么写?  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  实惠建站价格推荐:2025年高性价比自助建站套餐解析  如何注册花生壳免费域名并搭建个人网站?  ,交易猫的商品怎么发布到网站上去?  如何在建站宝盒中设置产品搜索功能?  建站之星导航菜单设置与功能模块配置全攻略  南平网站制作公司,2025年南平市事业单位报名时间?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  西安专业网站制作公司有哪些,陕西省建行官方网站?  广州美橙建站如何快速搭建多端合一网站?  网站制作价目表怎么做,珍爱网婚介费用多少?  如何选择服务器才能高效搭建专属网站?  焦点电影公司作品,电影焦点结局是什么?  Android滚轮选择时间控件使用详解  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  公司网站设计制作厂家,怎么创建自己的一个网站?  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  已有域名能否直接搭建网站?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  相册网站制作软件,图片上的网址怎么复制?  ,sp开头的版面叫什么?  如何选择网络建站服务器?高效建站必看指南  定制建站方案优化指南:企业官网开发与建站费用解析  定制建站模板如何实现SEO优化与智能系统配置?18字教程  公司网站制作需要多少钱,找人做公司网站需要多少钱?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  建站主机选哪种环境更利于SEO优化?  Android使用GridView实现日历的简单功能  开心动漫网站制作软件下载,十分开心动画为何停播?  宿州网站制作公司兴策,安徽省低保查询网站?  如何配置IIS站点权限与局域网访问? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。