正则表达式
基础
匹配机制
- 依次匹配各字符。
语法格式
- 数字 + 字母,
- 大小写敏感。
"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.