一、元字符(基本匹配符号)

符号 含义 示例
. 匹配任意单个字符(除换行符) 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 标签 <[^>]+>