正则表达式

学习视频: GeekHour30分钟正则表达式教程

正则表达式测试网站

正则表达式以"/"开头,以"/"结尾,在这之间写正则表达式。

"\"表示转义,对于一些特殊的字符,比如".",如果我们只是想要匹配"."这个字符,就需要在"."的前面加上"\"。例如:

基本字符匹配

|---------|--------------------------------------------------------------------------------|
| . | 匹配除了换行符之外的任意单个字符 |
| [ ] | 匹配方括号内的任意一个字符。例如,[abc] 会匹配"a", "b", 或 "c"。 可以使用 - 表示范围,例如,[a-z] 就表示所有小写字母。 |
| [^ ] | 匹配不在方括号中的任意字符。例如,[^abc]表示非"a", "b", "c"的任 意字符。 |
| | | 逻辑或操作。例如,cat|dog匹配"cat"或"dog"。 |

字符类

|-----|---------------------------------|
| \d | 匹配任意数字,等价与[0-9] |
| \D | 匹配任意非数字字符,等价与[^0-9] |
| \w | 匹配任意字母、数字及下滑线,等价于[a-zA-Z0-9_] |
| \W | 匹配任意非字母数字字符,等价于[^a-zA-Z0-9_] |
| \s | 匹配任意空白字符(空白、Tab、换行符等) |
| \S | 匹配任意非空白字符 |

量词

|-------|----------------|
| * | 匹配0次或者多次前面的元素 |
| + | 匹配1次或者多次前面的元素 |
| ? | 匹配0次或者1次前面的元素 |
| {n} | 确切匹配n次前面的元素 |
| {n,} | 匹配n次或者更多次前面的元素 |
| {n,m} | 匹配n次到m次前面的元素 |

定位符

|-----|--------------------------------------------------|
| ^ | 匹配每行的开头。例如:^Hello 匹配以Hello开头的行 |
| $ | 匹配每行的结尾。例如:World$ 匹配以World结尾的行 |
| \b | 匹配一个单词的边界。例如:\bin\b 就会精确匹配单词in,而不会匹配单词find中的in |
| \B | 匹配非单词边界,与\b相反 |

贪婪匹配和非贪婪匹配

|---------|--------------------------------------------------------------------|
| ab{3,} | 默认贪婪匹配,只要后面的字符依然满足条件,就会继续匹配。abbb、abbbb都满足条件 |
| ab{3,}? | 在量词后面加上问号就表示非贪婪匹配,满足条件后,即使后面依然符合条件也不会再继续匹配了。只有abbb满足条件,abbbb就不满足条件 |

旗标

|---|-------------------|
| i | 表示忽略大小写 |
| m | 多行匹配 |
| s | 允许.匹配包括换行符在内的所有字符 |
| g | 全局搜索,匹配文本中的所有实例 |

分组和引用

|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------|
| (abc) | 捕获分组。可以将多个字符当做一个整体来处理,也可以在后面引用捕获到的分组内容。 例如:想要匹配2024-05-01这样的日期格式,就可以使用: (\d{4})-(\d{1,2})-(\d{1-2}) 来分别捕获年、月和日的值,后面也可以使用\1、\2和\3或者 $1、$2、$3来引用它们。 |
| (?:abc) | 非捕获分组,仅使用分组功能,而不捕获。后面也不可以使用\1或 者$1来引用。 |

前瞻

|---------|-------------------------------------------------------------------------------------------------------|
| (?=...) | 正向前瞻: 只有当后面分组中的匹配成立时,才会匹配到它前面的指定内容。 例如:cat(?=dog) 会匹配catdog中的cat,但是不会匹配catcow 或者catpig中的cat。(找到狗前面的猫) |
| (?!...) | 负向前瞻: 只有当后面分组中的匹配不成立时,才会匹配到它前面的指定内 容。 例如:cat(?!dog) 不会匹配到catdog中的cat,但是会匹配catcow 中的cat。(找到不在狗前面的猫) |

后顾

|-----------|-------------------------------------------------------------------------------------------------------------|
| (?<=...) | 正向后顾: 只有当前面分组中的匹配成立时,才会匹配到它后面的指定内容。 例如:(?<=cat)dog 会匹配catdog中的dog,但是不会匹配cow dog或者pigdog中的dog。(找到猫后面的狗) |
| (?<!...) | 负向后顾: 只有当前面分组中的匹配不成立时,才会匹配到它后面的指定内 容。 例如:(?<!cat)dog 不会匹配到catdog中的dog,但是会匹配到cowdog和pigdog中的dog。(找到不在猫后面的狗) |

相关推荐
打鱼又晒网33 分钟前
【MySQL】数据库精细化讲解:内置函数知识穿透与深度学习解析
数据库·mysql
大白要努力!38 分钟前
android 使用SQLiteOpenHelper 如何优化数据库的性能
android·数据库·oracle
蝶开三月1 小时前
php:使用socket函数创建WebSocket服务
网络·websocket·网络协议·php·socket
tatasix1 小时前
MySQL UPDATE语句执行链路解析
数据库·mysql
南城花随雪。2 小时前
硬盘(HDD)与固态硬盘(SSD)详细解读
数据库
儿时可乖了2 小时前
使用 Java 操作 SQLite 数据库
java·数据库·sqlite
懒是一种态度2 小时前
Golang 调用 mongodb 的函数
数据库·mongodb·golang
天海华兮2 小时前
mysql 去重 补全 取出重复 变量 函数 和存储过程
数据库·mysql
Ai 编码助手2 小时前
使用php和Xunsearch提升音乐网站的歌曲搜索效果
开发语言·php
zwjapple2 小时前
typescript里面正则的使用
开发语言·javascript·正则表达式