Regular Express

本文深入探讨了字符集的概念及其在正则表达式中的应用,包括特殊符号如[]、{}

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

一 字符集

字符集用[]来存放要寻找的字符的集合。

1 *表示重复0次或多次,+表示重复1次或多次,?表示重复0次或1次


{min,max}用来表示重复次数,{0,1}等于?,{0,}等于*,{1,}等于+。


“.”匹配一个单个的字符而不用关心被匹配的字符是什么。“.”不匹配换行符

### IPv4 和 IPv6 地址的正则表达式 为了匹配IPv4和IPv6地址,可以分别设计两个不同的正则表达式来处理这两种类型的地址。 #### 匹配IPv4地址的正则表达式 IPv4地址由四个十进制数构成,每个数介于0到255之间,并通过点号分隔。以下是用于匹配IPv4地址的有效正则表达式: ```regex ^(?:(\d{1,3})\.){3}(\d{1,3})$ ``` 此正则表达式的解释如下: - `^\d{1,3}` 表示每一段数字长度为1至3位。 - `\.` 是用来匹配实际的点字符。 - `{3}` 表明前三段重复三次,最后一段单独存在[^1]。 然而,上述正则表达式并未验证数值范围是否在0~255之间。因此更严格的版本应为: ```regex ^(?:\b(?:\d{1,3}\.){3}\d{1,3}\b)$ ``` 进一步增强以确保各部分都在有效范围内: ```regex ^(?:(?:\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}(?:\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])$ ``` 这会精确限定每一节只允许合法值[^2]。 #### 匹配IPv6地址的正则表达式 对于IPv6地址而言,其结构更加复杂,它是由八组四位十六进制数组成并用冒号分割开来的形式表示。下面给出的是一个较为完整的IPv6地址匹配模式: ```regex ^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$ ``` 考虑到压缩写法(如`::`),以及嵌入IPv4的情况,则需要扩展该规则成为更为复杂的版本: ```regex ((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))| (([0-9A-Fa-f]{1,4}:)*:[0-9A-Fa-f]{0,4})| (::([fF]{4}(:0{1,4}){0,1}|(((2(5[0-5]|[0-4][0-9]))|(1?[0-9]?[0-9]))\.){3} ((2(5[0-5]|[0-4][0-9]))|(1?[0-9]?[0-9])))$) ``` 这个正则支持标准格式、零压缩(`::`)以及混合IPv4/IPv6的形式[^3]。 ### Python 实现例子 以下是一个简单的Python脚本,演示如何利用这些正则表达式检测输入字符串是否为有效的IP地址: ```python import re def validate_ip(ip_address): ipv4_pattern = r'^(?:(?:\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}(?:\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])$' ipv6_pattern = r'^(([0-9a-fA-F]{1,4}):){7}[0-9a-fA-F]{1,4}$' if re.match(ipv4_pattern, ip_address): return "Valid IPv4" elif re.match(ipv6_pattern, ip_address): return "Valid IPv6" else: return "Invalid IP" print(validate_ip("192.168.1.1")) # 输出 Valid IPv4 print(validate_ip("2001:db8::ff00:42:8329")) # 输出 Valid IPv6 print(validate_ip("invalid.ip.address")) # 输出 Invalid IP ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值