匹配 IP 地址与域名的正则表达式

一个完整的域名,由根域、顶级域、二级、三级……域名构成,每级域名之间用点分开,每级域名由字母、数字和减号构成(第一个字母不能是减号),不区分大小写,长度不超过63。

单独的名字可以由正则表达式[a-zA-Z0-9][-a-zA-Z0-9]{0,62}来匹配,而完整的域名至少包括两个名字(比如google.com,由google和com构成),最后可以有一个表示根域的点(在规范中,最后有一个点的才是完整域名,但一般认为包括两个以上名字的域名也是完整域名,哪怕它后面没有点)。

匹配完整域名的正则表达式:

代码如下:

[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?

一个IP字串,由四段组成,每一段是0~255的数字,段与段之间用小数点隔开,比如61.139.2.69就是一个合法的IP字串。

  如果正则表达式写成\d{1,3}(\.\d{1,3}){3}无疑是不负责的,因为它可以匹配300.400.555.666这样的非法IP字串。

  要匹配一个0~255之间的数,有几种匹配方式,下面是其中一种:

匹配 正则表达式 说明

  0~9 \d 单个数字
  10~99 [1-9]\d 两位数
  100~199 1\d\d 百位为1的三位数
  200~249 2[0-4]\d 三位数,百位是2,十位是0~9
  250~255 25[0-5] 三位数,百位是2,十位是5,个位是0~5

  写成正则表达式,即:(\d|([1-9]\d)|(1\d\d)|(2[0-4]\d)|(25[0-5])),但是这样的正则表达式在匹配254这样的字串时,会分别匹配2、5、4,得到3个匹配,达不到预期效果,正确做法是将次序颠倒为((25[0-5])|(2[0-4]\d)|(1\d\d)|([1-9]\d)|\d),因为在(xxx|yyy)这种匹配行为中,是从左向右搜索的。

  完整的正则表达式是: 

 

代码如下:

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

  按:

  象061这样的高位为0的数是不能被匹配的。

因此,最上面(1. 部分)的写法才是正确完整版的,(2. 部分)的写法较为片面

(0)

相关推荐

  • javascript正则表达式模糊匹配IP地址功能示例

    本文实例讲述了javascript正则表达式模糊匹配IP地址功能.分享给大家供大家参考,具体如下: function checkip() { var strIP = document.getElementById("accessip").value; var re = /^(\d{1,3}|\*)\.(\d{1,3}|\*)\.(\d{1,3}|\*)\.(\d{1,3}|\*)$/g //模糊匹配IP地址的正则表达式 if(re.test(strIP)){ if(RegExp.$1

  • php中获取指定IP的物理地址的代码(正则表达式)

    自己搭建IP数据库占资源,而且更新不便,何不使用现成的IP查询呢?下面自己写了个获取IP物理地址的PHP代码(有一定的瑕疵,请高手不吝赐教) 复制代码 代码如下: <!DOCTYPE html> <html lang="en"> <head> <title></title> <meta charset="UTF-8" /> <meta name="author" con

  • Shell脚本中通过正则表达式匹配IP地址

    在运维场景下,我们经常需要在服务器上用正则表达式来匹配IP地址. shell和其它编程语言一样,也可以使用正则分组捕获,不过不能使用 $1或\1这样的形式来捕获分组,可以通过数组${BASH_REMATCH}来获得,如${BASH_REMATCH[1]},${BASH_REMATCH[N]} 下面以ip="121.0.2.2"为例,shell脚本代码如下(当然,你要做成更通用交互式的脚本,可以通过expect来实现): 复制代码 代码如下: #!/bin/bash ip="1

  • Shell正则表达式验证IP地址

    本机多个IP 复制代码 代码如下: ifconfig | awk '/inet/{print $2}' | awk -F: '{print $2}' 首先,先用这个来着 复制代码 代码如下: CheckIPAddress()        {         echo $1 > /tmp/tmpserverip         echo $1 |grep "^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$" >

  • Python正则表达式匹配ip地址实例

    本文实例讲述了正则表达式匹配ip地址实例.代码结构非常简单易懂.分享给大家供大家参考. 主要实现代码如下: import re reip = re.compile(r'(?<![\.\d])(?:\d{1,3}\.){3}\d{1,3}(?![\.\d])') for ip in reip.findall(line): print "ip>>>", ip PS:关于正则,这里再为大家推荐2款非常方便的正则表达式工具供大家参考使用: JavaScript正则表达式

  • IP地址正则表达式匹配方法

    正则表达式(Regular Expression,在代码中常简写为regex.regexp或RE)是计算机科学的一个概念.正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式的文本.许多程序设计语言都支持利用正则表达式进行字符串操作.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式的文本. 正则表达式 ^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[

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

    本文实例讲述了正则表达式验证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. 这样把规则全部罗列出来之后,构造一个正则表达式的思路就

  • js:校验IPv6地址的正则表达式

    function isIPv6(str) { return str.match(/:/g).length [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

  • javascript使用正则表达式检测IP地址

    正则表达式: ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?) ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?) 红色块代表:第一个字符是2,第二个字符是0到4,第三个字符是任意一位数字.表示200~249. 绿色块代表:第一个字符是2,第二个字符是5,第三个字符是0到5.表示250~255. 蓝色块代表:第一个字符是0,或者1,或者

  • javascript 获取链接文件地址中第一个斜线内的正则表达式

    window.location.pathname 比如: /windows/location/page.html 我想得到"windows",请问用正则表达式怎么写? var a="/windows/location/page.html"; var reg=/(^(http[s]?:\/\/[^\/]*\/)|(^\/))([^\/]+)\/.*$/ig; var t=a.replace(reg,"$4"); alert(a + "\n

  • C#正则表达式分解和转换IP地址实例(C#正则表达式大全 c#正则表达式语法)

    只能输入数字:"^[0-9]*$". 只能输入n位的数字:"^\d{n}$". 只能输入至少n位的数字:"^\d{n,}$". 只能输入m~n位的数字:."^\d{m,n}$" 只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$". 只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$". 只能输入有1~3位小数的正实数:"^[0-9]+(.[0

随机推荐