正则看起来像乱码,其实只由三类零件组成:字符、量词、结构。掌握 20 个语法点就能应付日常 90% 的匹配需求。
点号匹配任意字符(不含换行);\d 匹配数字、\w 匹配单词字符、\s 匹配空白;反义用 \D \W \S。方括号内为字符集合,如 [a-z] 匹配小写字母。
* 零次或多次、+ 一次或多次、? 零次或一次、{n} 恰好 n 次、{n,} 至少 n 次、{n,m} n 到 m 次。量词默认贪婪,加 ? 变为懒惰匹配。
圆括号用于分组和捕获, 引用第一组内容;(?:...) 为非捕获分组;| 表示或。替换场景常用 $1 $2 引用捕获组。
^ 和 $ 匹配字符串首尾; 单词边界;(?=...) 正向先行断言,匹配后面跟着某内容的位置。手机号校验常用 ^1[3-9]\d{9}$。
避免嵌套量词如 (a+)+,回溯爆炸是性能杀手;用工具实测并简化模式。
点号默认不匹配换行,需开启 s 标志;匹配整个多行文本可用 [\s\S]。
不一样。通配符只有 * 和 ?,正则是完整的模式语言,能力远强于文件名匹配。