# 学习网站推荐

regexone.com 一个交互式的入门网站 (opens new window) learn-regex (opens new window)

# 基础

元字符 描述
. match-any-charcater
[ ] 匹配方括号内的任意一个字符
[^ ] 匹配除了方括号里的任意一个字符
* 匹配>=0个重复的在*号之前的字符
+ 匹配>=1个重复的+号前的字符
? 标记?之前的字符为可有可无的
{n,m} 匹配num个大括号之前的字符或字符集 (n <= num <= m)
(xyz) 子模式,匹配与 xyz 完全相等的字符串
| 或运算符,匹配符号前或后的字符
\ 转义字符,用于匹配一些保留的字符 [ ] ( ) { } . * + ? ^ $ \ |
^ match-beginning-of-line
$ match-end-of-line
简写 描述
. 除换行符外的所有字符
\w 匹配所有字母数字,等同于 [a-zA-Z0-9_]
\W 匹配所有非字母数字,即符号,等同于: [^\w]
\d 匹配数字: [0-9]
\D 匹配非数字: [^\d]
\s 匹配所有空格字符,等同于: [\t\n\f\r\p{Z}]
\S 匹配所有非空格字符: [^\s]
\f 匹配一个换页符
\n 匹配一个换行符
\r 匹配一个回车符
\t 匹配一个制表符
\v 匹配一个垂直制表符
\p 匹配 CR/LF(等同于 \r\n),用来匹配 DOS 行终止符

# 标志

使用标志:/RegEx/flags

标志 描述
i 忽略大小写
g 全局搜索(不仅仅返回第一个匹配的,而是返回全部)
m 多行修饰符:锚点元字符 ^ $ 工作范围在每行的起始

(^,$) 用于检查格式是否是在待检测字符串的开头或结尾。但我们如果想要它在每行的开头和结尾生效,我们需要用到多行修饰符 m。

# 前后预查

用于判断所匹配的格式是否在另一个确定的格式(通常会用小括号包裹)之前或之后,匹配结果不包含该确定格式(仅作为约束)。

符号 描述 示例
?= 正先行断言-存在(后面一定有) "(T
?! 负先行断言-排除(后面一定没有) "(T
?<= 正后发断言-存在(前面一定有) "(?<=(T
?<! 负后发断言-排除(前面一定没有) "(?<!(T

# 贪婪匹配和惰性匹配

正则表达式默认采用贪婪匹配模式(主要针对量词*,+,{l,},{,h},{l,h}),在该模式下意味着会匹配尽可能长的子串。我们可以使用 ?(紧跟在量词后面) 将贪婪匹配模式转化为惰性匹配模式。

"/(.*at)/" => The fat cat sat on the mat.

"/(.*?at)/" => The fat cat sat on the mat.