正则表达式
基础
匹配机制
- 依次匹配各字符;
语法格式
- 数字 + 字母,
- 大小写敏感;
"the" => The fat cat sat on **the** mat.
字符
任意字符 .
作用
- 匹配任意单个字符 (除换行符);
语法格式
".ar" => The car **par**ked in the **gar**age.
字符集 []
作用
- 匹配字符集内的任意字符;
语法格式
- [*char];
连字符
- 使用 - 连字符表示范围,
- [a - c] 等效于 [a, b, c];
"[Tt]he" => **The** car parked in **the** garage.
字符集取反 ^
作用
- 匹配除字符集内字符以外的任意字符;
语法格式
- 放置于字符集前;
"[^c]ar" => The car **par**ked in the **gar**age.
简写字符集
简写字符集
| 简写 | 描述 |
|---|---|
| . | 除换行符外的所有字符 |
| \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 行终止符 |
转义字符
常见转义字符
| { | } | [ | ] |
| / | \ | + | * |
| . | $ | ^ | | |
| ? |
重复次数
*
作用
- 表示 * 之前的字符出现了任意次数;
语法格式
- 放置于字符后;
"[a-z]*" => **The car parked in the garage**.
+
作用
- 表示 * 之前的字符出现了至少一次;
语法格式
- 放置于字符后;
"c.+t" => The fat **cat sat on the mat**.
?
作用
- 表示 * 之前的字符出现了 0 次 或 1 次;
语法格式
- 放置于字符后;
"[T]?he" => **The** car is parked in t**he** garage.
作用
- 限定 前字符的重复出现次数;
语法格式
{num}: 固定次数;{min, max}: [min, max] 次;- min: 可选, 默认为 0;
- max: 可选, 默认为 Infinity;
"[0-9]{3}" => The number was 9.**999**7 but we rounded it off to 10.0.
"[0-9]{2,}" => The number was 9.**9997** but we rounded it off to **10**.0.
匹配符号
整体 ()
作用
- 表示 () 包裹的内容视为一个整体;
语法格式
"(c|g|p)ar" => The **car** is **par**ked in the **gar**age.
$n
- 表示小括号的内容;
- $1 表示第一个小括号的内容,
- $2 表示第二个小括号的内容,
- 以此类推;
或运算 |
作用
- 表示逻辑运算或;
语法格式
"(T|t)he|car" => **The** **car** is parked in **the** garage.
^ 和 $
^
作用
- 表示匹配字符串为开头字符串;
语法格式
- 放置于匹配字符串前;
"^(T|t)he" => **The** car is parked in the garage.
$
作用
- 表示匹配字符串为结尾字符串;
语法格式
- 放置于匹配字符串后;
"(at\.)$" => The fat cat. sat. on the m**at.**
零宽度断言
?=
作用
- 表示匹配结果必须在 ? = 定义的表达式之前;
语法格式
- 断言 () 包裹,
- 表达式内容写在 ? = 其后,
- 表达式紧贴匹配结果, 写在匹配结果之后;
"(T|t)he(?=\sfat)" => **The** fat cat sat on the mat.
?!
作用
- 表示匹配结果不能在 ? ! 定义的表达式之前;
语法格式
- 断言 () 包裹,
- 表达式内容写在 ? ! 其后,
- 表达式紧贴匹配结果, 写在匹配结果之后;
"(T|t)he(?!\sfat)" => The fat cat sat on the **mat**.
?<=
作用
- 表示匹配结果必须在
?<=定义的表达式之后;
语法格式
- 断言 () 包裹,
- 表达式内容写在
?<=其后, - 表达式紧贴匹配结果, 写在匹配结果之前;
"(?<=(T|t)he\s)(fat|mat)" => The **fat** cat sat on the **mat**.
?<!
作用
- 表示匹配结果不能在
?<!定义的表达式之后;
语法格式
- 断言 () 包裹,
- 表达式内容写在
?<!其后, - 表达式紧贴匹配结果, 写在匹配结果之前;
"(?<!(T|t)he\s)(cat)" => The cat sat on **cat**.
匹配模式
i, g 和 m
一览
| 标志 | 描述 |
|---|---|
| i | 忽略大小写. |
| g | 全局搜索. |
| m | 多行修饰符: 锚点元字符 ^ $ 工作范围在每行的起始. |
语法格式
- 正则表达式 /.../ 包裹,
- /../ 其后使用标志;
"/The/gi" => **The** fat cat sat on **the** mat.
"/.at(.)?$/gm" => The **fat**
cat **sat**
on the **mat.**
贪婪匹配与惰性匹配
贪婪匹配
- 匹配尽可能长的字串,
- 默认匹配机制;
惰性匹配
- 匹配尽可能短的字串;
语法格式
- 使用 ? ,
- 放置于 +, * 后面;
"/(.*?at)/" => **The fat** cat sat on the mat.