用正则表达式匹配IPV4地址

本文详细介绍了如何构造一个有效的IPv4地址正则表达式,包括每部分数字的匹配规则,以及如何组合这些规则来形成完整的IPv4地址匹配模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

iew plainc

输出结果如下:

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

view plainco

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

参考:http://blogs.msdn.com/b/oldnewthing/archive/2006/05/22/603788.aspx

### 使用Python3中的正则表达式匹配有效的IPv4地址 在Python3中,可以使用`re`模块来实现正则表达式的操作。为了验证一个字符串是否为合法的IPv4地址,可以通过构造一个符合IPv4地址规则的正则表达式模式来完成[^1]。 以下是实现代码示例: ```python import re def is_valid_ipv4(ip): pattern = r"^(?!.*\b0\d)\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$" return bool(re.match(pattern, ip)) # 测试 print(is_valid_ipv4("192.168.0.1")) # True print(is_valid_ipv4("256.256.256.256")) # False print(is_valid_ipv4("192.168.01.1")) # False ``` 上述代码定义了一个函数`is_valid_ipv4`,该函数接收一个字符串参数`ip`,并通过正则表达式判断其是否为合法的IPv4地址。如果输入的IP地址合法,则返回`True`;否则返回`False`[^1]。 此外,还可以使用`re.findall`方法从一段文本中提取所有的IPv4地址[^3]。以下是一个示例: ```python import re string_ip = "Here are some IPs: 192.168.0.1, 256.256.256.256, and 10.0.0.1." pattern = r"\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b" result = re.findall(pattern, string_ip) print(result) # 输出:['192.168.0.1', '10.0.0.1'] ``` 在这个例子中,`re.findall`会返回一个列表,其中包含所有匹配到的合法IPv4地址[^3]。 ### 注意事项 - IPv4地址由四个以点分隔的十进制数构成,每个数的范围为0到255。 - 需要确保不会出现类似`192.168.01.1`这样的非法地址(前导零不符合标准)[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值