| 符号 | 含义 | 示例 |
|---|---|---|
\d | 数字 | \d+ 匹配连续数字 |
\w | 字母数字下划线 | \w+ 匹配单词 |
. | 任意字符(换行除外) | a.c 匹配 abc/axc |
* | 前项重复0次以上 | ab* 匹配 a/ab/abb |
+ | 前项重复1次以上 | ab+ 匹配 ab/abb |
? | 前项0或1次 | colou?r 匹配 color/colour |
^ $ | 行首行尾 | ^abc 以abc开头 |
[abc] | 字符集合 | 匹配 a 或 b 或 c |
匹配大陆手机号:
^1[3-9]\d{9}$
匹配邮箱(宽松版):
^[\w.-]+@[\w-]+(\.[\w-]+)+$
匹配中文:
[\u4e00-\u9fa5]+
匹配URL中的域名:
https?://([^/]+)
默认量词是贪婪的——尽可能多匹配。加个 ? 变非贪婪,尽可能少匹配。提取HTML标签内容时这个区别最明显:<div>(.*)</div> 会一路吃到最后一个 div,而 <div>(.*?)</div> 在第一个闭合标签就停。处理结构化文本时,先想清楚要贪婪还是非贪婪,能省一半调试时间。
写正则别凭感觉,丢进在线测试器跑几个真实样本:正向的(应该匹配的)、反向的(不该匹配的)各来几组。注意不同语言的正则方言略有差异,比如 PHP 的 \d 在某些场景要写成 [0-9] 更稳妥。复杂正则拆开来分段验证,比一次性写完再排查快得多。