美文网首页
正则表达式 - 匹配 IP 地址

正则表达式 - 匹配 IP 地址

作者: 简了个书1993 | 来源:发表于2018-05-31 14:56 被阅读9443次
17220161221160719

IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
IP地址的长度为32位(共有2^32个IP地址),分为4段,每段8位,用十进制数字表示,每段数字范围为0~255,段与段之间用句点隔开。


摘自:百度百科[1]



IP地址格式

IP地址的长度为32位(共有2^32个IP地址),分为4段,每段8位
用十进制数字表示,每段数字范围为0~255,段与段之间用句点隔开。
// 0.0.0.0 ~ 255.255.255.255



根据规则:每段相同,范围都在 0 ~ 255
0~255 对应的正则表达式为 ` 2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2} `

下面简单介绍它的组成 ` 2(5[0-5]{1}|[0-4]\d{1}) ` 和 ` [0-1]?\d{1,2} `

一:` 2(5[0-5]{1}|[0-4]\d{1}) `

1.  5[0-5]{1}    # 匹配:50 ~ 55
2.  [0-4]\d{1}   # 匹配:0 ~ 49

那么完整的 ` 2(5[0-5]{1}|[0-4]\d{1}) ` 匹配的就是 200 ~ 255

二:` [0-1]?\d{1,2} ` 
它匹配的是 0 ~ 199

所以整段表达式匹配的就是 0 ~ 255



0 到 255 的式子已经写出来了,那么一共四段再加上中间的点就很容易了

最终版

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

其实是可以再简化的,重复 `点和数字` 三次就可以了

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

下边是各种语言的程序代码:(使用“在线工具[2]”生成)

js

var pattern = /(2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2})(\.(2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2})){3}/g,
    str = '';
console.log(pattern.test(str));

php

$str = '';
$isMatched = preg_match_all('/(2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2})(\.(2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2})){3}/', $str, $matches);
var_dump($isMatched, $matches);

go

package main

import (
    "fmt"
    "regexp"
)

func main() {
    str := "test"
    matched, err := regexp.MatchString("(2(5[0-5]{1}|[0-4]\\d{1})|[0-1]?\\d{1,2})(\\.(2(5[0-5]{1}|[0-4]\\d{1})|[0-1]?\\d{1,2})){3}", str)
    fmt.Println(matched, err)
}

rb

pattern = /(2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2})(\.(2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2})){3}/
str = ''
p pattern.match(str)

python2

import re
pattern = re.compile(ur'(2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2})(\.(2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2})){3}')
str = u''
print pattern.search(str)

python3

import re
pattern = re.compile(r'(2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2})(\.(2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2})){3}')
str = ''
print(pattern.search(str))

java

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches {
    
    public static void main(String args[]) {
        String str = "";
        String pattern = "(2(5[0-5]{1}|[0-4]\\d{1})|[0-1]?\\d{1,2})(\\.(2(5[0-5]{1}|[0-4]\\d{1})|[0-1]?\\d{1,2})){3}";

        Pattern r = Pattern.compile(pattern);
        Matcher m = r.matcher(str);
        System.out.println(m.matches());
    }

}

objc

NSString *str = @"";
NSString *pattern = @"(2(5[0-5]{1}|[0-4]\\d{1})|[0-1]?\\d{1,2})(\\.(2(5[0-5]{1}|[0-4]\\d{1})|[0-1]?\\d{1,2})){3}";
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern: pattern options:nil error:&error];
NSArray *match = [regex matchesInString:str options:NSMatchingCompleted range:NSMakeRange(0, [str length])];
if (match.count != 0) {
    // ...
}



经过大量数据测试,均可完美匹配,例如:001.001.001.001 依然是OK的,如有问题敬请指出,会第一时间回复

请尊重原创,转载注明出处

参考资料:
[1] 百度百科 - IP地址
[2] 在线工具 - 正则测试工具

相关文章

  • Java正则表达式

    正则表达式一般用于字符串匹配、查找、替换、分割。例如: 从网页中找出email地址,IP地址是否正确,从网页中找出...

  • java正则表达式判断 ip 地址是否正确

    java正则表达式判断 ip 地址是否正确 可以通过这个图来理解 ip 地址的正则表达式: java 的 ip 正...

  • 正则表达式 - 匹配 IP 地址

    IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP...

  • python正则表达式匹配合法IP

    闲着无聊,计划练习一下正则表达式,所以找了一个相对熟悉的问题--用正则表达式匹配合法的IP地址,个人觉得这个表达式...

  • 正则匹配IP地址

  • Python正则表达式匹配IP地址

    使用网络爬虫的小伙伴们在爬取网络数据时候需要动态的解析网络中的IP地址,我将python使用正则解析IP地址的方法如下:

  • IP地址的正则匹配

    IP 地址分 4 段,每段的范围是 0-255 1. 最简单的版本 简单写,可以写成 但是这个不够精确,因为没有限...

  • IP选路

    IP搜索路由的几个步骤: 搜索匹配的主机地址 搜索匹配的网络地址 搜索默认表项 IP层进行的选路实际上是一种选路机...

  • 扣丁学堂Linux培训分享shell通过正则匹配ip地址实例代码

    在运维场景下,我们经常需要在服务器上用正则表达式来匹配IP地址。本篇文章扣丁学堂Linux培训小编和读者们分享一下...

  • 匹配ipv4地址的正则表达式

    本文主要介绍使用正则表达式匹配ipv4地址。 1、粗犷匹配 比较粗犷的匹配方法,直接匹配四组使用了.进行分隔的数字...

网友评论

      本文标题:正则表达式 - 匹配 IP 地址

      本文链接:https://www.haomeiwen.com/subject/nhrqsftx.html