正则表达式(Regular Expression)是一种用于匹配、搜索或操作文本的强大工具,通过定义模式来匹配字符串中的特定内容。以下是正则表达式的核心语法和常见用法,分为基础和进阶部分:
一、基础语法
1. 字符匹配
- 普通字符:直接匹配对应字符(如
a、1、@)。 - 特殊字符(需转义
\):. * + ? ^ $ \ | ( ) [ ] { }
例如:\.匹配字面意义的点号。
2. 字符类(Character Classes)
- 匹配任意一个字符:
.:匹配除换行符外的任意字符。[abc]:匹配a、b或c。[^abc]:匹配非a、b、c的字符。[a-z]:匹配任意小写字母。[0-9]:匹配任意数字(等同于\d)。
3. 量词(Quantifiers)
*:匹配前一个字符 0 次或多次(如a*匹配""、a、aa)。+:匹配前一个字符 1 次或多次(如a+匹配a、aa)。?:匹配前一个字符 0 次或 1 次(如a?匹配""或a)。{n}:匹配前一个字符 恰好 n 次(如a{3}匹配aaa)。{n,}:匹配前一个字符 至少 n 次(如a{2,}匹配aa、aaa)。{n,m}:匹配前一个字符 n 到 m 次(如a{1,3}匹配a、aa、aaa)。
4. 锚点(Anchors)
^:匹配字符串的开头(如^Hello匹配"Hello world"中的Hello)。$:匹配字符串的结尾(如world$匹配"Hello world"中的world)。\b:匹配单词边界(如\bcat\b匹配"cat"但不匹配"category")。
5. 分组与捕获
( ):分组并捕获匹配内容(如(ab)+匹配abab,并捕获ab)。(?: ):分组但不捕获(如(?:ab)+不捕获分组内容)。
二、进阶语法
1. 或操作(Alternation)
|:匹配左侧或右侧的表达式(如cat|dog匹配"cat"或"dog")。
2. 转义字符
\d:匹配任意数字(等同于[0-9])。\w:匹配字母、数字或下划线(等同于[a-zA-Z0-9_])。\s:匹配空白字符(空格、制表符、换行符等)。\D、\W、\S:分别匹配\d、\w、\s的补集。
3. 贪婪与非贪婪匹配
- 贪婪模式(默认):量词匹配尽可能多的字符(如
a.+b匹配"aabab"中的"aabab")。 - 非贪婪模式:在量词后加
?(如a.+?b匹配"aabab"中的"aab"和"ab")。
4. 回溯引用(Backreferences)
\1、\2:引用前面捕获的分组(如(\d)\1匹配"22"、"33")。
5. 环视(Lookaround)
- 正向肯定环视
(?= ):匹配后面满足条件的字符串(如a(?=b)匹配"ab"中的a)。 - 正向否定环视
(?! ):匹配后面不满足条件的字符串(如a(?!b)匹配"ac"中的a)。 - 反向环视:类似,但检查前面的内容(
(?<= )、(?<! ))。
三、常用正则示例
- 匹配邮箱:
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ - 匹配日期(YYYY-MM-DD):
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$ - 匹配手机号(中国):
^1[3-9]\d{9}$ - 移除多余空格:
\s+ // 替换为单个空格
四、工具与测试
- 在线测试工具:Regex101、RegExr。
- 编程语言支持:
- Python:
re模块(如re.search(r'\d+', '123'))。 - JavaScript:
RegExp对象(如/a+/g.test('aaa'))。 - Java:
Pattern和Matcher类。
- Python:
五、注意事项
- 性能问题:复杂的正则可能导致回溯爆炸(如
(a+)+b匹配"aaaaaaaa!"时)。 - 可读性:优先使用清晰的代码逻辑,而非过度复杂的正则。
- 转义差异:不同语言对正则的转义规则可能不同(如 Python 中需用
r'\d'避免转义)。
掌握正则表达式需要结合实践,建议从简单模式开始,逐步尝试复杂场景!
2万+

被折叠的 条评论
为什么被折叠?



