一、元字符(基本匹配符号)
| 符号 | 含义 | 示例 |
|---|---|---|
. |
匹配任意单个字符(除换行符) | a.b 匹配 "aab", "a1b" |
^ |
匹配字符串开头 | ^abc 匹配以 "abc" 开头的字符串 |
$ |
匹配字符串结尾 | abc$ 匹配以 "abc" 结尾的字符串 |
* |
匹配前一个字符 0 次或多次 | ab*c 匹配 "ac", "abc", "abbc" |
+ |
匹配前一个字符 1 次或多次 | ab+c 匹配 "abc", "abbc",不匹配 "ac" |
? |
匹配前一个字符 0 次或 1 次 | ab?c 匹配 "ac", "abc" |
{n} |
匹配前一个字符恰好 n 次 | a{3} 匹配 "aaa" |
{n,} |
匹配前一个字符至少 n 次 | a{2,} 匹配 "aa", "aaa", ... |
{n,m} |
匹配前一个字符 n 到 m 次 | a{2,4} 匹配 "aa", "aaa", "aaaa" |
二、字符类
| 符号 | 含义 | 示例 |
|---|---|---|
[abc] |
匹配 a、b 或 c 中任意一个 | [aeiou] 匹配任意元音字母 |
[^abc] |
匹配除 a、b、c 外的任意字符 | [^0-9] 匹配任意非数字字符 |
[a-z] |
匹配 a 到 z 范围内任意字符 | [A-Za-z] 匹配任意字母 |
\d |
匹配数字,等价于 [0-9] |
\d{3} 匹配 3 位数字 |
\D |
匹配非数字,等价于 [^0-9] |
|
\w |
匹配字母、数字、下划线,等价于 [A-Za-z0-9_] |
|
\W |
匹配非单词字符 | |
\s |
匹配空白字符(空格、制表符、换行等) | |
\S |
匹配非空白字符 | |
\b |
匹配单词边界 | \bcat\b 匹配 "cat",不匹配 "category" |
\B |
匹配非单词边界 |
三、分组与引用
| 语法 | 含义 |
|---|---|
(abc) |
捕获分组:匹配 "abc" 并记住匹配内容 |
(?:abc) |
非捕获分组:匹配但不记住 |
(?\<name\>abc) |
命名捕获分组 |
\1, \2 |
反向引用:引用第 1、2 个捕获组的内容 |
(abc|def) |
或:匹配 "abc" 或 "def" |
四、量词模式
| 模式 | 含义 |
|---|---|
*?, +?, ?? |
懒惰匹配:尽可能少地匹配 |
*, +, ? |
贪婪匹配(默认):尽可能多地匹配 |
示例:
<.*>贪婪匹配整个<div>hello</div>;<.*?>懒惰匹配只取<div>
五、零宽断言(Lookaround)
| 语法 | 含义 |
|---|---|
(?=abc) |
正向先行断言:后面是 "abc" |
(?!abc) |
负向先行断言:后面不是 "abc" |
(?<=abc) |
正向后行断言:前面是 "abc" |
(?<!abc) |
负向后行断言:前面不是 "abc" |
示例:
\d+(?=元)匹配 "100元" 中的 "100"
六、常用标志(Flags)
| 标志 | 含义 |
|---|---|
g |
全局匹配(找所有匹配,而非停在第一个) |
i |
忽略大小写 |
m |
多行模式:^ 和 $ 匹配每行的开头/结尾 |
s |
单行模式:. 也能匹配换行符 |
u |
Unicode 模式 |
七、常见正则示例
| 场景 | 正则表达式 |
|---|---|
| 手机号(中国) | 1[3-9]\d{9} |
| 邮箱 | [\w.-]+@[\w.-]+\.\w+ |
| URL | https?://[\w./?=&%-]+ |
| IP 地址 | \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} |
| 中文 | [一-龥]+ |
| 去除首尾空格 | ^\s+|\s+$ |
| 密码(6-16 位字母数字) | ^[A-Za-z0-9]{6,16}$ |
| HTML 标签 | <[^>]+> |