正则表达式详解表

核心概念

正则表达式是一种用于描述文本模式的语法。它允许你进行复杂的搜索、替换、提取和验证操作。

类别元字符/语法描述示例示例匹配结果
普通字符字母、数字等匹配字符本身。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位数字。
URLhttps?://[^\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+/>)`

如何使用这些表格?

  1. 从问题出发:先明确你想匹配什么样的文本(例如:所有数字、以某个词开头的句子、邮箱地址)。
  2. 查找对应工具:在表格中找到能实现你目标的元字符(例如:匹配数字用 \d,匹配开头用 ^)。
  3. 组合构建:将这些元字符像搭积木一样组合起来,形成最终的正则表达式。
  4. 测试验证:使用在线的正则表达式测试工具(如 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或yz|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"
\unUnicode字符\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
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐