正则表达式基础内容
正则表达式(Regular Expression):以特定的字符串模式获取指定字符串。
元字符 匹配一个位置或字符集合中的一个字符
两种类型:
1. 匹配位置的元字符
🍸^匹配开始
^start here
🍸$匹配结束
end here$
【^$】 表示匹配一个空行
🍸\b匹配一个位置
\b不能匹配任何空格符号、标点符号或者换行符号中任何一个。
\bStr 匹配以Str开头的字符串 \bString\b 匹配String字符串
2. 匹配字符的元字符
🍡\. 匹配除了换行符之外的任意字符
🍡\w 匹配任意单词字符包含字母、数字、下划线和汉字
🍡\W 匹配非单词字符
w -> word: 字符eg: 字母、数字、下划线和汉字
🍡\s 匹配任意空白字符包含空格、制表符、换行符、中文全角空格等
🍡\S 匹配任意非空白字符
s -> special: 特殊字符 eg: 空格、制表符、换行符
🍡\d 匹配任意数字
🍡\D 匹配非数字字符
字符类 []
元字符通常一次只匹配一个位置或字符集合中的一个字符。因此要匹配字符集合就要使用字符类 []
[0123456679] # 匹配数字
连接符 -
[0-9],[a-zA-z]
只有在字符类中“-”不是第一个字符时候,才有特殊意义
[-a] # 匹配字符 -或a
如果字符^是第一个字符那么不匹配带有后面的字符
^ 和 []表示取非
[^aAeEiIoOuU] # 匹配非元音字符
替换符 "|"
优先匹配左侧表达式
(?(表达式)yes|no)
表达式要么与yes部分匹配要么与no部分匹配
eg: (?(name)yes|no)
以name命名的字符串要么与yes部分匹配,要么与no部分匹配首先回匹配|左侧,若未成功再匹配右侧!
限定符
{n} 重复n次 {n,} 重复<=n次 {n,m} 重复 n<= 次数 <=m * 重复 >= 0次 + 重复 >= 1次 ? 重复 1或0次 *? 尽可能少的使用重复的第一个匹配 +? 尽可能少的使用重复,但至少使用一次 ?? 使用0次重复或一次重复 {n}? 等同于{n} {n,}? 尽可能少的使用重复,但至少使用n次 {n,m}? 尽可能少的使用重复,但介于n次和m次之间
分组 “(” ")"
通过()分组后将"()"之间的表达式看作一个整体来处理
eg: (abc){1,2}匹配abc字符串出现一次或两次的字符串
key | desc |
---|---|
(expression) | 匹配字符串expression,并将匹配的文本保存到自动命名的组里 |
(? |
匹配字符串expression,并将匹配的文本以name名称,名称不能有标点符号且以数字开头 |
(?:expression) | 匹配字符串expression,不保存文本,也不分配字号) |
(?=expression) | 匹配字符串expression前面的位置 |
(?!expression) | 匹配后面不是字符串expression的位置 |
(?<=expression | 匹配字符串expression后面的位置 |
(?<!expression) | 匹配前面不是字符串expression的位置 |
(?>expression) | 只匹配字符串expression一次 |
反向引用 "\数字"
分组之后,每个分子将被赋予一个组号,编号规则是从左往右,以"("为标志,从1开始编号
eg: \b(\w)\1\b 实际上和\b(\w)\w\b类似,不同的是 \1所在地方指的是第一个()里面的内容
\b(\w)\1\b 匹配的是 aa而匹配不到ab
\b(\w)\w\b 匹配的是 aa和bb
零宽度断言
keywords | DESC |
---|---|
^ | 匹配开始位置 |
$ | 匹配结束位置 |
\A | 匹配必须出现在字符串开头 |
\Z | 匹配必须出现在字符串结尾,或者字符串结尾处的换行符之前 |
\z | 匹配必须出现在字符串结尾 |
\G | 匹配必须出现在上一个匹配结束的地方 |
\b | 匹配字符的开始或结束位置 |
\B | 匹配不是在字符的开始或结束位置 |
字符转义 ""
\\->\ |
\^ -> ^ |
```[->[ | ]->]``` | \$->$ |
---|---|---|---|---|
\a(响铃) | \b(单词边界或字符类中退格符) | \t制表符 | \r(回车符) | \v(垂直制表符) |
\f(换页符) | \n(换行符) | \e(回退符) | \040 匹配8进制 | \x20 匹配16进制 |
案例
二进制数值: ^(0|(1[0-1]*))$ 八进制数值:^(0|([1-7][0-7]*))$ 十六进制数值:^(0|([1-9A-Fa-f][0-9A-Fa-f]*))$ 国内手机号码: \b0?(12\d{9})|(15[89]\d{8}\b 身份证号码(18位):^\d{6}((1[89])|(2\d))\d{2}((0\d)|(1[0-2]))(3[01])|([0-2]\d))\d{3}(\d|X)$ 一、数字的正则表达式 1.数字:^[0-9]*$ 2.n位的数字:^\d{n}$ 3.至少n位的数字:^\d{n,}$ 4.m-n位的数字:^\d{m,n}$ 5.零和非零开头的数字:^(0|[1-9][0-9]*)$ 6.非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$ 7.带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$ 8.正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$ 二、字符的正则表达式 1.汉字:^[\u4e00-\u9fa5]{0,}$ 2.英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$ 3.长度为3-20的所有字符:^.{3,20}$ 4.由26个英文字母组成的字符串:^[A-Za-z]+$ 5.由26个大写英文字母组成的字符串:^[A-Z]+$ 6.由26个小写英文字母组成的字符串:^[a-z]+$ 7.由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$ 8.由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$ 9.中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$ 10.中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$ 11.禁止输入含有~的字符:[^~\x22]+ 特殊需求正则表达式 1.Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$ 2.域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.? 3.URL:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ 4.手机号码:^[1][3,4,5,7,8][0-9]{9}$ 5. 身份证号: 15或18位身份证:^\d{15}|\d{18}$ 15位身份证:^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$ 18位身份证:^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$ 短身份证号码(数字、字母x结尾):^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$ 6.帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 7.密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$ 8.强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$ 9.日期格式:^\d{4}-\d{1,2}-\d{1,2} 10.IP地址:\d+\.\d+\.\d+\.\d+ 11.中文字符的正则表达式:[\u4e00-\u9fa5]
学而不思则罔,思而不学则殆!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具