正则表达式使用指南

掌握强大的文本匹配工具

基础语法
高级技巧
实用示例
元字符
元字符 描述 示例
. 匹配除换行符外的任意单个字符 a.c 匹配 "abc", "a1c" 等
^ 匹配字符串的开始 ^abc 匹配以 "abc" 开头的字符串
$ 匹配字符串的结束 xyz$ 匹配以 "xyz" 结尾的字符串
* 匹配前一个字符0次或多次 ab*c 匹配 "ac", "abc", "abbc" 等
+ 匹配前一个字符1次或多次 ab+c 匹配 "abc", "abbc" 但不匹配 "ac"
? 匹配前一个字符0次或1次 ab?c 匹配 "ac" 或 "abc"
\d 匹配数字 (等价于 [0-9]) \d+ 匹配一个或多个数字
\w 匹配字母、数字或下划线 (等价于 [A-Za-z0-9_]) \w+ 匹配一个或多个单词字符
\s 匹配空白字符 (空格、制表符、换行符等) \s+ 匹配一个或多个空白字符
字符类与量词
字符类
[abc]
匹配 "a", "b" 或 "c" 中的任意一个字符
[a-z]
匹配任何小写字母
[^abc]
匹配除了 "a", "b" 和 "c" 之外的任何字符
在字符类中,大多数特殊字符不需要转义,但 ], \, ^, - 需要转义
量词
a{3}
精确匹配 3 个连续的 "a" 字符
a{2,4}
匹配 2 到 4 个连续的 "a" 字符
a{2,}
匹配至少 2 个连续的 "a" 字符
默认情况下量词是"贪婪"的,会匹配尽可能多的字符。在量词后加 ? 可使其变为"非贪婪"模式。
分组与引用
分组
(abc)+
匹配一个或多个连续的 "abc" 序列
(a|b)c
匹配 "ac" 或 "bc"
使用 (?:...) 可以创建非捕获组,不会记住匹配的子串
反向引用
(a)\1
匹配 "aa"(\1 引用第一个捕获组匹配的内容)
(a)(b)\2\1
匹配 "abba"
示例:匹配重复单词
\b(\w+)\b\s+\1\b
匹配像 "the the" 或 "is is" 这样的重复单词
断言
先行断言
a(?=b)
匹配后面跟着 "b" 的 "a"
a(?!b)
匹配后面不跟着 "b" 的 "a"
后行断言
(?<=a)b
匹配前面是 "a" 的 "b"
(?
匹配前面不是 "a" 的 "b"
示例:提取价格数字
(?<=\$)\d+\.\d{2}
匹配美元符号后面的价格,如 "$19.99" 中的 "19.99"
常用正则表达式
电子邮件
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
匹配大多数有效的电子邮件地址
URL
^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$
匹配HTTP/HTTPS URL
手机号码
^1[3-9]\d{9}$
匹配中国大陆手机号码
身份证号
^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$
匹配中国大陆18位身份证号(简单校验)
日期
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
匹配YYYY-MM-DD格式的日期
编程语言中的应用
JavaScript
检测字符串是否匹配模式
const pattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; const email = "user@example.com"; console.log(pattern.test(email)); // true
提取匹配内容
const text = "价格: $19.99, 折扣价: $15.50"; const pricePattern = /\$(\d+\.\d{2})/g; let match; while ((match = pricePattern.exec(text)) !== null) { console.log("找到价格:", match[1]); }
Python
搜索和替换
import re text = "今天是2023-05-15,明天是2023-05-16" pattern = r"(\d{4})-(\d{2})-(\d{2})" # 替换日期格式 new_text = re.sub(pattern, r"\2/\3/\1", text) print(new_text) # 今天是05/15/2023,明天是05/16/2023