Practice make perfect

正则表达式复习

用来检索、替换符合某个模式(规则)的文本。

一图胜千言

匹配以字母、数字、下划线、减号开头 长度为3-15个的串

元字符

元字符 描述
. 句号匹配任意单个字符除了换行符.
[ ] 字符种类. 匹配方括号内的任意字符.
[^ ] 否定的字符种类. 匹配除方括号里的任意字符
* * 前 匹配 >= 0 次
+ + 前 匹配 >= 1 次
? ?前 匹配 0次 1次
{n,m} { 前 匹配 n 到 m 次,包括nm,其他形式: {n, } , {n}
(xyz) 字符集, 匹配与 xyz 完全相等的字符串.
| 或运算符,匹配符号前或后的字符.
\ 转义字符,用于匹配一些保留的字符 [ ] ( ) { } . * + ? ^ $ \ |
^ 从串首行开始匹配.
$ 从串尾开始匹配.

简写字符集

简写 描述
\w 匹配所有字母数字, 等同于 [a-zA-Z0-9_]注意下划线也匹配
\W 匹配所有非字母数字, 即符号, 等同于: [^\w]
\d 匹配数字: [0-9]
\D 匹配非数字: [^\d]
\s 匹配所有空格字符, 等同于: [\t\n\f\r\v\p{Z}] =v=?
\S 匹配所有非空格字符: [^\s]
\f 匹配一个换页符
\n 匹配一个换行符
\r 匹配一个回车符
\t 匹配一个制表符
\v 匹配一个垂直制表符
\p 匹配 CR/LF (等同于 \r\n),用来匹配 DOS 行终止符

零宽度断言(前后预查)

先行断言和后发断言都属于非捕获簇(不捕获文本 ,也不针对组合计进行计数). 先行断言用于判断所匹配的格式是否在另一个确定的格式之前, 匹配结果不包含该确定格式(仅作为约束).

符号 描述
?= 正先行断言-存在
?! 负先行断言-排除
?<= 正后发断言-存在
?<! 负后发断言-排除

(?=...) 正先行断言

表示第一部分表达式之后必须跟着 ?=...定义的表达式。返回结果只包含满足匹配条件的第一部分表达式. 定义一个正先行断言要使用 (). 在括号内部使用一个问号和等号: (?=...).

例子:

"(T|t)he(?=\sfat)" => The fat cat sat on the mat.

匹配以The/the 开头,且紧跟着(空格)fat

(?!...) 负先行断言

用于筛选所有匹配结果, 筛选条件为其后不跟随着断言中定义的格式.

例子:

"(T|t)he(?!\sfat)" => The fat cat sat on the mat.

匹配以The/the开头,后不跟着(空格)fat

(?<= ...) 正后发断言

用于筛选所有匹配结果, 筛选条件为 其前是断言中定义的格式.

例子:

"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.

匹配fatmat, 且其前是 Thethe.

(?<!...) 负后发断言

用于筛选所有匹配结果, 筛选条件为 其前不是断言中定义的格式.

例子:

"(?<!(T|t)he\s)(cat)" => The cat sat on cat.

匹配 cat, 且其前不跟着 Thethe.

标志

标志也叫模式修正符, 因为它可以用来修改表达式的搜索结果. 这些标志可以任意的组合使用, 它也是整个正则表达式的一部分.

标志 描述
i 忽略大小写.
g 全局搜索.
m 多行的: 锚点元字符 ^ $ 工作范围在每行的起始.

i 忽略大小写 (Case Insensitive)

例子:

"/The/gi" => The fat cat sat on the mat.

g 表示全局搜索,i 表示忽略大小写

g 全局搜索 (Global search)

用于执行一个全局搜索匹配, 即不仅仅返回第一个匹配的, 而是返回全部匹配结果

例子:

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

匹配 任意字符(除了换行) + at, 并返回全部结果.

m 多行修饰符 (Multiline)

用于执行一个多行匹配.

例子:

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

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

匹配 小写字符 a 后跟小写字符 t , 末尾可选除换行符外任意字符. 通过 m 修饰符, 现在表达式匹配每行的结尾.

贪婪匹配与惰性匹配 (Greedy vs lazy matching)

正则表达式默认采用贪婪匹配模式,在该模式下意味着会匹配尽可能长的子串。我们可以使用 ? 将贪婪匹配模式转化为惰性匹配模式。

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

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

整理自

Learn regex the easy way

评论

转载请注明作者和出处,并添加本页链接。 原文链接: /andyhui.top/learn-regex/