这里给大家详细讲解一下一个匹配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还望读者提出,免得误导其他读者。

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

下面是我的测试:

$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 '

';

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);

php正则配ip,正则表达式匹配IP的表达式(推荐)相关推荐

  1. python re正则提取ip地址_python 正则表达式匹配IP地址

    一.实验环境 1.Windows7x64_SP1 2.anaconda2.5.0 + python2.7(anaconda集成,不需单独安装) 3.pyinstaller3.0 二.实验目的 从tex ...

  2. java正则匹配ip_使用正则表达式匹配IP地址

    如何使用正则表达式匹配IP地址?这是很常见的任务.说难也难,说易也易,取决于在匹配的精确度以及正则表达式复杂度之间很好的折中. 通常,IP地址以点分十进制方式表示,IP地址分为4段,以点号分隔.要对I ...

  3. python正则匹配ip地址_Python正则表达式匹配ip地址实例

    Python正则表达式匹配ip地址实例 更新时间:2014年10月09日 11:22:51 投稿:shichen2014 这篇文章主要介绍了Python正则表达式匹配ip地址实例,通过简单的实例讲述了 ...

  4. python正则匹配ip地址_IP地址正则表达式匹配方法,ip正则表达式匹配

    IP地址正则表达式匹配方法,ip正则表达式匹配 正则表达式(Regular Expression,在代码中常简写为regex.regexp或RE)是计算机科学的一个概念.正则表达式使用单个字符串来描述 ...

  5. php 正则mac地址,正则表达式匹配MAC地址、邮箱地址、IP地址

    (1)匹配MAC地址 1)MAC地址由12个16进制的字母组成 2)16个字母是 0~9.a~f .不区分大小写,一般为大写 3)每两个字母为一组,共六组,每组间用冒号:隔开 匹配思路: 00:0C: ...

  6. python正则匹配ip地址_python 正则表达式匹配IP地址

    一.实验环境 1.Windows7x64_SP1 2.anaconda2.5.0 + python2.7(anaconda集成,不需单独安装) 3.pyinstaller3.0 二.实验目的 从tex ...

  7. java正则匹配ip_正则表达式 - 匹配 IP 地址

    17220161221160719 IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写.IP地址是IP协议提供的一 ...

  8. python中利用re模块正则表达式匹配ip地址

    python中利用正则表达式判断ipv4地址是否合法 ip地址的范围为0.0.0.0-255.255.255.255,分成四段,则每段的范围都是0-255,因此,以一段进行分析: 在进行书写匹配规则时 ...

  9. 正则表达式-匹配ip及rtsp

    IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写.IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一 ...

最新文章

  1. ckeditor富文本编辑器的基本配置设置:
  2. 对于生活服务小公司网站的看法
  3. python脚本如何监听终止进程行为,如何通过脚本名获取pid
  4. 深度学习核心技术精讲100篇(三十六)-EdgeRec:边缘计算在淘宝推荐系统中的大规模应用
  5. Oracle外键需要建索引吗?
  6. [Swift] 使用Playground
  7. 5G发展是绵绵秋雨 应循序渐进
  8. javascript在html中的延迟与异步
  9. vb还是python强大-最难学的七大编程语言,VB 第一,Python垫底,看你学的排第几...
  10. android可以设计的软件,不懂APP如何设计?送你10条Android设计原则
  11. matlab画中国地图深浅,matlab画中国行政区划图/省界图(转)
  12. 整理了一下国外的搜索引擎 名字以及IP地址
  13. 关于候鸟捕杀——人类愚蠢之至
  14. 移动应用程序和网页应用程序_设计网站和移动应用程序的空白状态页
  15. Memery of habit
  16. a股用计算机模拟走势,一张图揭示抄底A股的机会在这里
  17. VMware下安装Raspbian树莓派系统
  18. codeforces 1255 B. Fridge Lockers
  19. 树莓派远程视频监控的移植pistreaming
  20. mysql 数据库怎么收缩_SQL Server -- 数据收缩详解

热门文章

  1. 地理住宅区的特点_北京各地区居住生活的人,有区域性特点么?
  2. dax powerbi 生成表函数_PowerBI 应用时间智能(生成日期表)
  3. 模拟中国铁路12306网页
  4. java8 异步请求 回滚_was8 报错 资源回滚,因为调用 setRollbackOnly()
  5. android ios 录音功能,盘点:简单好用的录音APP有哪些?
  6. 聚爆登进去显示服务器,《聚爆Implosion》首次大型更新 新模式“驾驶员系统”登场...
  7. 怎样在Mac里彻底删除Adobe Acrobat Pro DC_Mac上一些好用的图形设计软件
  8. 帝国cms灵动调用,当前文章id文章高亮显示
  9. 智慧园区三维可视化系统,助力传统产业园区发展
  10. [转载]锤子官网的 banner 的 3D 悬浮效果