正则表达式入门:从 10 个常用例子学会读和写
正则表达式(Regular Expression,简称 regex)是一种描述“文本模式”的小语言,可以用来查找、校验、替换文本。它在编辑器、Excel 插件、数据库、几乎所有编程语言里都能用。初看像乱码,但常用的语法只有十几个。下面先列出核心语法,再用 10 个例子练习。
一、核心语法速查
- 普通字符:
abc匹配文本 abc。 - .:任意一个字符(默认不含换行)。
- 字符类:
[abc]匹配 a、b、c 之一;[0-9]数字;[^0-9]非数字。 - 简写:
\d数字,\w字母数字下划线,\s空白;大写\D \W \S表示相反。 - 量词:
*0 次或多次,+1 次或多次,?0 或 1 次,{3}恰好 3 次,{2,5}2 到 5 次。 - 锚点:
^开头,$结尾,\b单词边界。 - 分组与或:
(ab)+把 ab 当一个整体重复;cat|dog匹配 cat 或 dog。 - 转义:要匹配
. * + ? ( ) [ ] { } \ ^ $ |这些特殊字符本身,前面加反斜杠,如\.。
二、10 个例子
1. 中国大陆手机号(简化校验):^1[3-9]\d{9}$。以 1 开头,第二位 3–9,后面 9 位数字,共 11 位。号段会变化,这里只做格式粗校验。
2. 6 位邮政编码:^\d{6}$。
3. 日期 YYYY-MM-DD:^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$。月份限定 01–12,日期 01–31。注意它不会检查 2 月 30 日这种不存在的日期,严格校验要交给日期函数。
4. 简单邮箱格式:^[\w.+-]+@[\w-]+(\.[\w-]+)+$。完全符合标准的邮箱正则极其复杂,实际中用简单正则粗查,再通过发验证邮件确认。
5. IPv4 地址(每段 0–255):^((25[0-5]|2[0-4]\d|1?\d?\d)\.){3}(25[0-5]|2[0-4]\d|1?\d?\d)$。按 250–255、200–249、0–199 三种情况分别写,这是正则表达“数值范围”的典型方法。
6. 提取文本中所有数字:\d+(\.\d+)?,能匹配 2026 和 3.14。
7. 去掉行首行尾空白:查找 ^\s+|\s+$,替换为空(需开启多行模式)。
8. 匹配中文汉字:[\u4e00-\u9fff]+,覆盖常用汉字所在的基本区,生僻字可能在扩展区,不一定能匹配。
9. 提取 HTML 链接地址:href="([^"]*)",括号里的分组就是链接。[^"]* 表示“不是引号的任意字符”,比 .* 更安全。处理复杂 HTML 仍建议用专门的解析库。
10. 交换日期格式:把 2026/10/22 变成 22-10-2026:查找 (\d{4})/(\d{2})/(\d{2}),替换为 $3-$2-$1(有的工具写作 \3-\2-\1)。
三、贪婪与非贪婪
量词默认是“贪婪”的,会尽量多匹配。对文本 <b>一</b>和<b>二</b> 用 <b>.*</b>,会从第一个 <b> 一直匹配到最后一个 </b>。在量词后加 ? 变成非贪婪:<b>.*?</b>,就会分别匹配两段。
四、常见错误
- 忘了锚点:校验时不加
^...$,\d{6}也能在 “abc1234567” 里找到匹配,校验形同虚设。 - 忘了转义点号:
bingyuantools.com中的点会匹配任意字符,应写成bingyuantools\.com。 - 在代码字符串里少写反斜杠:很多语言的普通字符串里要写
"\\d"才表示\d,可以用原始字符串(如 Python 的r"\d")避免。 - 不同引擎语法有差异:JavaScript、Python、Java、PCRE 在命名分组、后行断言、Unicode 支持上略有不同,以所用语言的文档为准。
- 写得太复杂:一个正则超过一行就难以维护,可以拆成多步处理,或加注释。
五、怎么测试
写正则一定要准备“应该匹配”和“不应该匹配”两组样例,逐个验证。例如手机号的反例要包括 10 位、12 位、以 12 开头的号码。本站首页“开发”分类收录了在线正则测试工具;如果要处理的是 JSON 数据,先用 JSON 格式化工具 整理成易读格式再写正则会轻松很多;统计匹配前后的文本长度,可以用 字数统计。