正则表达式详解
1、正则表达式构成
简介:描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
构成:/正则表达式/匹配模式
1.1、普通字符与元字符
- 匹配手机号中,是否含有字母a /a/ 像a这种含义与字面意义一样的字符,叫普通字符
- 匹配手机号中,是否需含有非数字 /\D/ 像\D这种含义与字面意义不同的字符,叫元字符
1.2、常用元字符
- \d: 数字
- \D: 非数字
- \w: 单词字符word 大写字母、小写字母、下划线_、数字
- \W: 非单词字符
- \s: 空白字符 空格、换行符、制表符tab 看不见但又真实存在的字符
- \S: 非空白字符
1.3、特殊符号
- ^:行开头
- ():定义子表达式
- []: 构建范围 [13579]
- {}:表示匹配的长度,{3}3个字符长度,{6,9}6-9个字符长度
- [^]:表达取反,如:匹配偶数 [24680] 或 [ ^13579]
- +:出现至少1次
- .:任意字符,除换行和回车之外
- *:任意次数
- ?:出现0或1次
- (.\d+)?:括号里内出现0或1次
- $:行结尾
1.4、匹配模式
- g:global 全局匹配 尝试在字符串的所有位置进行匹配
- i:ignore 忽略大小写 在匹配时,可以忽略大小写
1.5、正则三问
- 查什么:抓住要匹配的字符串特征 根据特征 选用合适的正则符号
- 查多少:说明这种字符出现的次数 量词 {} *+? {}?
- 在哪查:指定字符出现的位置 任意位置 紧跟 ^字符串起始位置 $字符串结束位置 \b单词边界 \B非单词边界
2、子表达式
2.1、定义子表达式
-
需求:匹配连续4位相同数字
三问:查什么=数字\d,查多少=4位,在哪查=任意位置
-
分析:
-
p1:先查出1个数字,
-
p2:再查后面3个数字与p1相同
copy
/(\d)\1{3}/g #说明 ():定义子表达式 \d:数字 \1:第1个子表达式,即(\d) {3}:出现3次 g:全局匹配,在字符串的所有位置进行匹配
-
-
子表达式:/(子表达式1)(子表达式2)(子表达式3)/
子表达式1=\1,子表达式2=\2,子表达式3=\3
2.2、相关练习
-
匹配
AABB
格式的字符串:1122,开开心心,!!@@p1:查什么=任意字符,查多少=1个,在哪查=任意
p2:查什么=与P1相同,查多少=1个,在哪查=紧跟
p3:查什么=任意字符,查多少=1个,在哪查=紧跟
p4:查什么=与p3相同,查多少=1个,在哪查=紧跟
copy
/(.)\1(.)\2/g
-
p1:查什么=<,查多少=1个,在哪查=任意
p2:查什么=字母,查多少=1个,在哪查=紧跟
p3:查什么=字母或数字,查多少=任意个,在哪查=紧跟
p4:查什么=>,查多少=1个,在哪查=紧跟
p5:查什么=任意字符,查多少=任意个,在哪查=紧跟
p6:查什么=</,查多少=1个,在哪查=紧跟
p7:查什么=与p2p3一样,查多少=1个,在哪查=紧跟
p8:查什么=>,查多少=1个,在哪查=紧跟
copy
/<([a-z][a-z\d]*)>.*<\/\1>/i
-
匹配
ABAAB
格式的字符串:12112p1:查什么=任意字符,查多少=1个,在哪查=任意
p2:查什么=任意字符,查多少=1个,在哪查=紧跟
p3:查什么=与p1相同,查多少=2个,在哪查=紧跟
p4:查什么=与p2相同,查多少=1个,在哪查=紧跟
copy
/(.)(.)\1{2}\2/g
3、选择匹配符
3.1、使用选择匹配符
需求:匹配 xiaobai
或者 xiaohong
copy/xiaobai|xiaohong/g
#使用选择匹配符 | 来表达选择性质的需求
需求:捕获小写字母a或b或c
copy/[abc]/g
或
/a|b|c/g
3.2、选择匹配符结合子表达式
需求:匹配 hellophp
或 hellojava
p1:查什么=hello,查多少=1个,在哪查=任意
p2:查什么=php或java,查多少=1个,在哪查=紧跟
copy/hello(php|java)/gi
4、预查
4.1、正向预查
需求:匹配在php左边3个数字,123php,456php
正向预查语法:(?=要前瞻的字符)
p1:查什么=数字,查多少=3个,在哪查=任意
p2:查什么=是php预兆,查多少=1个,在哪查=紧跟
copy/\d{3}(?=php)/g
4.2、正向预查取反
需求:匹配不在php左边3个数字
正向预付取反语法:(?!要匹配的字符)
p1:查什么=数字,查多少=3个,在哪查=任意
p2:查什么=不是php预兆,查多少=1个,在哪查=紧跟
copy/\d{3}(?!php)/g
4.3、预查捕获
需求:捕获php左边的三位数字,并且把php本身也捕获出来
预查捕获:(?:要预查的字符)
copy/\d{3}(?:php)/g
4.4、选择性预查
需求:捕获php或者java左边的3位数字
p1:查什么=数字,查多少=3个,在哪查=任意
p2:查什么=php或java,查多少=1个,在哪查=紧跟
copy/\d{3}(?=php|java)/g
4.5、多条件预查
-
需求:匹配一个含有小写字母a的字符串,
***a***
1
p1:查什么=任意字符,查多少=任意个,在哪查=任意
p2:查什么=a,查多少=1个,在哪查=紧跟
p3:查什么=任意字符,查多少=任意个,在哪查=紧跟
copy
/.*a.*/
2
p1:查什么=任意字符,查多少=任意个,在哪查=任意
p2:查什么=a出现的预兆,查多少=1个,在哪查=紧跟
p3:查什么=任意字符,查多少=任意个,在哪查=紧跟
copy
/.*(?=a).*/
-
需求:匹配一个含有php的字符串,
***php***
p1:查什么=***php出现的预兆,查多少=1个,在哪查=任意
p2:查什么=任意字符,查多少=任意个,在哪查=紧跟
copy
/(?=^.*php).*/
-
需求:密码验证,要求密码中必须包含大写字母、小写字母、数字,
**A**b**1**
p1:查什么=大写字母出现的预兆,
(?=.*[A-Z])
p2:查什么=小写字母出现的预兆,
(?=.*[a-z])
p3:查什么=数字出现的预兆,
(?=.*\d)
copy
/(?=.*[A-Z])(?=.*[a-z])(?=.*\d)/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2020-08-20 SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 2
2019-08-20 php整洁之道(转)