正则表达式
·
正则表达式
正则表达式详解表
核心概念
正则表达式是一种用于描述文本模式的语法。它允许你进行复杂的搜索、替换、提取和验证操作。
| 类别 | 元字符/语法 | 描述 | 示例 | 示例匹配结果 |
|---|---|---|---|---|
| 普通字符 | 字母、数字等 | 匹配字符本身。 | abc | "abc" (在 “123 abc xyz” 中) |
1. 字符匹配
| 类别 | 元字符/语法 | 描述 | 示例 | 示例匹配结果 |
|---|---|---|---|---|
| 任意字符 | . | 匹配任意一个字符(除换行符外)。 | a.c | "abc", "a c", "a@c" |
| 字符集 | [abc] | 匹配方括号内的任意一个字符。 | [aeiou] | 在 "cat" 中匹配 "a" |
| 字符范围 | [a-z], [0-9] | 匹配指定范围内的任意一个字符。 | [A-Za-z] | 匹配任何一个大写或小写字母 |
| 否定字符集 | [^abc] | 匹配不在方括号内的任意一个字符。 | [^0-9] | 在 "a1" 中匹配 "a" |
| 预定义字符集 | \d | 匹配一个数字。等价于 [0-9]。 | user\d | "user1", "user5" |
\D | 匹配一个非数字。等价于 [^0-9]。 | \D+ | 在 "Price: $100" 中匹配 "Price: $" | |
\w | 匹配一个单词字符(字母、数字、下划线)。 | \w+ | 在 "Hello, world!" 中匹配 "Hello" 和 "world" | |
\W | 匹配一个非单词字符(如标点、空格)。 | \W | 在 "a b" 中匹配空格 | |
\s | 匹配一个空白字符(空格、制表符等)。 | a\sb | "a b" (a和b之间有空格) | |
\S | 匹配一个非空白字符。 | \S+ | 在 "a b" 中匹配 "a" 和 "b" |
2. 数量词(限定符)
| 类别 | 元字符/语法 | 描述 | 示例 | 示例匹配结果 |
|---|---|---|---|---|
| 零次或多次 | * | 匹配前面的元素零次或多次(尽可能多)。 | ab*c | "ac", "abc", "abbc" |
| 一次或多次 | + | 匹配前面的元素一次或多次(尽可能多)。 | ab+c | "abc", "abbc" (不能匹配 "ac") |
| 零次或一次 | ? | 匹配前面的元素零次或一次。 | colou?r | "color", "colour" |
| 指定次数 | {n} | 匹配前面的元素恰好 n 次。 | \d{4} | "2023", "1234" |
| 范围次数 | {n,} | 匹配前面的元素至少 n 次。 | \d{2,} | "123", "12", "12345" |
| 范围次数 | {n,m} | 匹配前面的元素至少 n 次,至多 m 次。 | \d{2,4} | "12", "123", "1234" |
3. 位置锚点
| 类别 | 元字符/语法 | 描述 | 示例 | 示例匹配结果 |
|---|---|---|---|---|
| 开始位置 | ^ | 匹配字符串的开始。 | ^Hello | 在 "Hello world" 中匹配 "Hello" |
| 结束位置 | $ | 匹配字符串的结束。 | world$ | 在 "Hello world" 中匹配 "world" |
| 单词边界 | \b | 匹配单词的开始或结束位置。 | \bcat\b | 在 "a cat" 中匹配 "cat",但在 "category" 中不匹配 |
| 非单词边界 | \B | 匹配非单词边界的位置。 | \Bcat\B | 在 "category" 中匹配 "cat",但在 "a cat" 中不匹配 |
4. 分组与选择
| 类别 | 元字符/语法 | 描述 | 示例 | 示例匹配结果 |
|---|---|---|---|---|
| 捕获分组 | (abc) | 将多个元素作为一个分组,可被引用或提取。 | (\d{3})-(\d{4}) | 在 "123-4567" 中,分组1为 "123",分组2为 "4567" |
| 非捕获分组 | (?:abc) | 只分组,不捕获(不分配组号)。 | (?:www\.)?(example\.com) | 匹配 "example.com" 和 "www.example.com",但只捕获域名部分 |
| 选择 | ` | ` | 匹配左边或右边的表达式。 | `cat |
| 反向引用 | \1, \2… | 引用前面第 n 个捕获分组匹配的文本。 | (\w+) \1 | 在 "hello hello" 中匹配 "hello hello" |
5. 转义与模式修饰符
| 类别 | 元字符/语法 | 描述 | 示例 |
|---|---|---|---|
| 转义字符 | \ | 将特殊字符(元字符)转义为普通字符。 | \. 匹配字面的点 .,而不是任意字符 |
| 模式修饰符 | i (不区分大小写) | 使匹配对大小写不敏感。 | /hello/i 可以匹配 "Hello", "HELLO" |
g (全局匹配) | 找到所有匹配,而不是在第一个匹配后停止。 | 在 "a a a" 中,/a/g 会匹配到三个 "a" | |
m (多行模式) | 使 ^ 和 $ 匹配每行的开头和结尾。 | 在多行文本中,/^\d+/gm 会匹配每一行开头的数字 |
综合应用示例
| 场景 | 正则表达式模式 | 描述 |
|---|---|---|
| 邮箱地址 | [\w\.-]+@[\w\.-]+\.\w+ | 匹配常见的邮箱格式。 |
| 手机号(简单中国) | 1[3-9]\d{9} | 匹配以1开头,第二位为3-9的11位数字。 |
| URL | https?://[^\s/$.?#].[^\s]* | 匹配以 http:// 或 https:// 开头的URL。 |
| 日期 (YYYY-MM-DD) | \d{4}-\d{2}-\d{2} | 匹配如 "2023-10-05" 的日期。 |
| 强密码验证 | ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$ | 至少一个小写字母、一个大写字母、一个数字,且长度至少8位。 |
| HTML标签 | `<([a-z]+)([^<]+)(?:>(.)</\1> | \s+/>)` |
如何使用这些表格?
- 从问题出发:先明确你想匹配什么样的文本(例如:所有数字、以某个词开头的句子、邮箱地址)。
- 查找对应工具:在表格中找到能实现你目标的元字符(例如:匹配数字用
\d,匹配开头用^)。 - 组合构建:将这些元字符像搭积木一样组合起来,形成最终的正则表达式。
- 测试验证:使用在线的正则表达式测试工具(如 regex101.com)来测试你的表达式,确保它能正确工作。
好的,这是将您提供的正则表达式内容整理成的表格:
正则表达式语法参考表
基本元字符
| 字符 | 描述 | 示例 | 示例说明 |
|---|---|---|---|
\ | 转义字符,将特殊字符转为字面意义 | \n \\( | 匹配换行符、匹配"(" |
^ | 匹配输入字符串的开始位置 | ^Hello | 匹配以Hello开头的字符串 |
$ | 匹配输入字符串的结束位置 | world$ | 匹配以world结尾的字符串 |
. | 匹配除"\n"外的任何单个字符 | a.c | 匹配abc、a c等 |
数量词(限定符)
| 字符 | 描述 | 示例 | 示例说明 |
|---|---|---|---|
* | 匹配前面子表达式0次或多次 | zo* | 匹配z、zo、zoo |
+ | 匹配前面子表达式1次或多次 | zo+ | 匹配zo、zoo,不匹配z |
? | 匹配前面子表达式0次或1次 | do(es)? | 匹配do、does中的do |
{n} | 匹配确定的n次 | o{2} | 匹配food中的oo |
{n,} | 至少匹配n次 | o{2,} | 匹配foooood中的所有o |
{n,m} | 最少n次,最多m次 | o{1,3} | 匹配foooood中的前三个o |
?(非贪婪) | 紧跟在限制符后表示非贪婪模式 | o+? | 对于"oooo"只匹配单个o |
字符集合
| 字符 | 描述 | 示例 | 示例说明 |
|---|---|---|---|
[xyz] | 字符集合,匹配包含的任意字符 | [abc] | 匹配plain中的a |
[^xyz] | 负值字符集合,匹配未包含的字符 | [^abc] | 匹配plain中的p |
[a-z] | 字符范围,匹配指定范围内字符 | [a-z] | 匹配a到z的任意小写字母 |
[^a-z] | 负值字符范围,匹配不在范围内的字符 | [^a-z] | 匹配不在a到z范围的字符 |
x|y | 匹配x或y | z|food | 匹配z或food |
分组与引用
| 字符 | 描述 | 示例 | 示例说明 |
|---|---|---|---|
(pattern) | 匹配pattern并获取匹配 | (\d{3}) | 捕获三位数字分组 |
(?:pattern) | 匹配pattern但不获取匹配 | industr(?:y|ies) | 比’industry|industries’更简略 |
(?=pattern) | 正向预查 | Windows (?=95|98) | 匹配"Windows 2000"中的Windows |
(?!pattern) | 负向预查 | Windows (?!95|98) | 匹配"Windows 3.1"中的Windows |
预定义字符集
| 字符 | 描述 | 等价于 |
|---|---|---|
\d | 匹配数字字符 | [0-9] |
\D | 匹配非数字字符 | [^0-9] |
\s | 匹配任何空白字符 | [ \f\n\r\t\v] |
\S | 匹配任何非空白字符 | [^ \f\n\r\t\v] |
\w | 匹配单词字符 | [A-Za-z0-9_] |
\W | 匹配非单词字符 | [^A-Za-z0-9_] |
边界匹配
| 字符 | 描述 | 示例 | 示例说明 |
|---|---|---|---|
\b | 匹配单词边界 | er\b | 匹配never中的er,不匹配verb中的er |
\B | 匹配非单词边界 | er\B | 匹配verb中的er,不匹配never中的er |
特殊字符转义
| 字符 | 描述 | 示例 |
|---|---|---|
\f | 匹配换页符 | 等价于\x0c和\cL |
\n | 匹配换行符 | 等价于\x0a和\cJ |
\r | 匹配回车符 | 等价于\x0d和\cM |
\t | 匹配制表符 | 等价于\x09和\cI |
\v | 匹配垂直制表符 | 等价于\x0b和\cK |
\cM | 匹配Control-M或回车符 | x必须为A-Z或a-z之一 |
\xn | 十六进制转义值 | \x41匹配"A" |
\un | Unicode字符 | \u00A9匹配版权符号© |
向后引用
| 字符 | 描述 | 示例 | 示例说明 |
|---|---|---|---|
\num | 对所获取匹配的引用 | (.)\1 | 匹配两个连续的相同字符 |
\n | 八进制转义值或向后引用 | ||
\nm | 八进制转义值或向后引用 | ||
\nml | 八进制转义值 | n为0-3,m和l为0-7 |
扩展预查语法
| 语法 | 描述 | 示例 | 示例说明 |
|---|---|---|---|
(?=E) | 表达式后面紧跟着E才匹配 | const(?=\s+char) | 匹配const且其后必须有char |
(?!E) | 表达式后面没有紧跟着E才匹配 | const(?!\s+char) | 匹配const且其后不能有char |
更多推荐
所有评论(0)