# 学习网站推荐
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.
← git Linux - Ubantu →