正则表达式入门:20 个常用模式与四个调试技巧
WebTool 团队 · 发布于 2026-09-04 · 正则表达式 / Regex / 开发
正则表达式是用一串符号描述字符串匹配规则的语法,掌握 10 个元字符就能覆盖日常 80% 的需求。 写正则时建议边写边在本站正则测试器里验证,支持实时高亮与分组提取。
元字符速查
| 符号 | 含义 | 示例 |
|---|---|---|
. |
任意字符(除换行) | a.c 匹配 abc |
\d \w \s |
数字 / 单词字符 / 空白 | \d{4} 匹配年份 |
[abc] [^abc] |
字符集合 / 排除 | [0-9a-f] 十六进制 |
* + ? |
0+ / 1+ / 0或1 次 | colou?r |
{n,m} |
n 到 m 次 | \d{6} 邮编 |
^ $ |
行首 / 行尾 | ^# 匹配标题行 |
() |
分组(可提取) | (\d+)-(\d+) |
(?:) |
非捕获分组 | (?:https?://) |
| ` | ` | 或 |
20 个常用模式
| 场景 | 模式 |
|---|---|
| 中国大陆手机号 | ^1[3-9]\d{9}$ |
| 邮箱(宽松) | ^[\w.+-]+@[\w-]+\.[\w.]+$ |
| URL | ^https?://[\w.-]+(?::\d+)?(?:/\S*)?$ |
| IPv4 | `^((25[0-5] |
| 日期 YYYY-MM-DD | `^\d{4}-(0[1-9] |
| 中文姓名 | ^[一-龥]{2,4}$ |
| 身份证(18 位) | ^\d{17}[\dXx]$ |
| 强密码(8+ 含大小写数字) | ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$ |
| 提取 HTML 标签内容 | <([a-z]+)[^>]*>(.*?)</\1> |
| 匹配空白行 | ^\s*$ |
| 十六进制颜色 | ^#(?:[0-9a-fA-F]{3}){1,2}$ |
| Base64 | ^[A-Za-z0-9+/]+={0,2}$ |
| 中文标点 | [,。!?;:""''()] |
| 千分位数字 | \d{1,3}(?:,\d{3})+ |
| 版本号 | ^\d+\.\d+\.\d+$ |
| 文件扩展名 | \.([a-z0-9]+)$ |
| 驼峰转单词 | ([a-z])([A-Z]) → $1 $2 |
| 行尾空白 | [ \t]+$ |
| 连续重复字符 | (.)\1{2,} |
| 注释行(//) | ^\s*//.*$ |
四个调试技巧
- 贪婪 vs 懒惰:
.*会吃到最后一個可能的匹配,.*?遇到第一个就停。匹配引号内容用"[^"]*"比".*"更安全。 - 回溯失控(ReDoS):嵌套量词如
(a+)+对恶意输入会指数级回溯,在线服务里校验输入长度上限。 - 锚点别忘:校验整个字符串加
^...$,否则\d+在 "abc123" 里也能命中。 - 转义层级:在字符串字面量里写正则(Java/Python),
\d要写成"\\d",用原始字符串(Pythonr"")可避免。
最后更新:2026-09-04