正则表达式是什么
正则表达式(Regular Expression,简称 regex 或正则)是一串用来按规则匹配文本的”模式”。比如你想从一段文字里找出所有邮箱、校验手机号格式、或把日期批量替换——用正则一行就能描述,不用写一堆 if 判断。
它几乎在所有编程语言、编辑器和命令行工具(grep、sed)里都能用,是处理文本的通用利器。
基本组成
一条正则由普通字符和元字符(有特殊含义的符号)组成。例如 \d{4}-\d{2} 里:\d 是”数字”,{4} 是”重复 4 次”,- 是普通的连字符。
常用元字符速查
| 符号 | 含义 | 例子 |
|---|---|---|
. | 任意单个字符(默认不含换行) | a.c 匹配 abc、a1c |
\d | 数字 0-9 | \d\d 匹配 42 |
\w | 字母、数字或下划线 | \w+ 匹配 hello_1 |
\s | 空白字符(空格/制表/换行) | |
[abc] | 字符类:方括号内任一个 | [aeiou] 匹配任一元音 |
[^abc] | 取反:不是这些字符 | [^0-9] 匹配非数字 |
[a-z] | 范围 | [a-z] 匹配小写字母 |
量词(重复次数)
| 符号 | 含义 |
|---|---|
* | 0 次或多次 |
+ | 1 次或多次 |
? | 0 次或 1 次(可选) |
{n} | 恰好 n 次 |
{n,} | 至少 n 次 |
{n,m} | n 到 m 次 |
分组与锚点
- 分组
( ):把一部分括起来,可整体重复或提取。如(ab)+匹配 ababab;(?<year>\d{4})是命名组。 - 或
|:cat|dog匹配 cat 或 dog。 - 锚点:
^匹配开头,$匹配结尾,\b匹配单词边界。如^\d+$表示”整串都是数字”。
常见误区
- 忘记转义:
.、*、(等本身是元字符,要匹配字面量需转义为\.、\*、\(。 - 贪婪匹配:
.*默认尽可能多匹配,常导致”匹配过头”,需要时用非贪婪.*?。