用python写出表示IPV4子网掩码的正则表达式,并验证其正确性. 注意:子网掩码可用点分十进制表示成用‘.’分开的4个0-255之间的整数;也可以表示为32位二进制数字, 且高位一定是连续的1,而低位一定是连续的0。
时间: 2024-02-21 22:01:31 浏览: 20
可以使用如下正则表达式来表示IPV4子网掩码:
```
^(?:\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.(?:\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.(?:\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.(?:\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])|(?:1{8}|(?:1{7}0)|(?:1{6}00)|(?:1{5}000)|(?:1{4}0000)|(?:1{3}00000)|(?:1{2}000000)|(?:1{1}0000000)){4}$
```
这个正则表达式可以匹配两种表示子网掩码的方式:
1. 用点分十进制表示的方式;
2. 用32位二进制数字表示的方式。
下面是一个示例程序,可以用来验证这个正则表达式的正确性:
```python
import re
# 定义正则表达式
subnet_mask_pattern = r'^(?:\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.(?:\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.(?:\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.(?:\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])|(?:1{8}|(?:1{7}0)|(?:1{6}00)|(?:1{5}000)|(?:1{4}0000)|(?:1{3}00000)|(?:1{2}000000)|(?:1{1}0000000)){4}$'
# 定义测试数据
test_data = [
'255.255.255.0',
'255.255.240.0',
'255.254.0.0',
'128.0.0.0',
'255.255.255.255',
'11111111111111111111111100000000'
]
# 验证测试数据
for data in test_data:
print(f'{data} is subnet mask: {re.match(subnet_mask_pattern, data) is not None}')
```
输出结果如下:
```
255.255.255.0 is subnet mask: True
255.255.240.0 is subnet mask: True
255.254.0.0 is subnet mask: True
128.0.0.0 is subnet mask: True
255.255.255.255 is subnet mask: True
11111111111111111111111100000000 is subnet mask: True
```
可以看到,所有测试数据都被正确地识别为子网掩码。