正则表达式小记录

正则表达式小记录

正则表达式其实就是在执行搜索时的格式,从左到右进行匹配。

一般来说,正则表达式是大小写敏感的。

1. 元字符

正则表达式主要依赖于元字符. 元字符不代表他们本身的字面意思, 他们都有特殊的含义.

元字符 描述
. 句号匹配任意单个字符除了换行符.
[ ] 字符种类. 匹配方括号内的任意字符.不关心顺序.
[^ ] 否定的字符种类. 匹配除了方括号里的任意字符
* 匹配>=0个重复的在之前*的字符.
+ 匹配>=1个重复的+号的字符.
? 标记?之前的字符为可选.
{n,m} 匹配num个大括号之前的字符 (n <= num <= m).
(xyz) 字符集, 匹配与 xyz 完全相等的字符串.
| 或运算符,匹配符号前或后的字符.
\ 转义字符,用于匹配一些保留的字符 `[ ] ( ) { } . * + ? ^ $ \ `
^ 开始行开始匹配.
$ 末端开始匹配.

1.1点运算符 .

例如, 表达式.ar匹配一个任意字符后面跟着是ar的字符串.

1.2字符集

例如, 表达式[Tt]he 匹配 theThe.

方括号的句号就表示句号. 表达式 ar[.] 匹配 ar.字符串

例如, 表达式[^c]ar匹配一个后面跟着ar的除了c的任意字符.

1.3重复次数

. 例如, 表达式 a* 匹配以0或更多个a开头的字符, 因为有0个这个条件, 其实也就匹配了所有的字符.

表达式[a-z]* 匹配一个行中所有以小写字母开头的字符串.

*字符和.字符搭配可以匹配所有的字符.*.

*和表示匹配空格的符号\s连起来用, 如表达式\s*cat\s*匹配0或更多个空格开头和0或更多个空格结尾的cat字符串.

例如表达式c.+t 匹配以首字母c开头以t结尾,中间跟着任意个字符的字符串.

例如, 表达式 [T]?he 匹配字符串 heThe.

1.4{}

例如, 表达式 [0-9]{2,3} 匹配最少 2 位最多 3 位 0~9 的数字.

例如, [0-9]{2,} 匹配至少两位 0~9 的数字.

例如, [0-9]{3} 匹配3位数字

1.5(...) 特征标群

例如, 表达式 (ab)* 匹配连续出现 0 或更多个 ab.

我们还可以在 () 中用或字符 | 表示或. 例如, (c|g|p)ar 匹配 cargarpar.

1.6| 或运算符

例如 (T|t)he|car 匹配 (T|t)hecar.

1.7转码特殊字符

例如 . 是用来匹配除换行符外的所有字符的. 如果想要匹配句子中的 . 则要写成 \. 以下这个例子 \.?是选择性匹配.

1.8锚点

例如, 在 abc 中使用表达式 ^a 会得到结果 a. 但如果使用 ^b 将匹配不到任何结果. 因为在字符串 abc 中并不是以 b开头.

例如, ^(T|t)he 匹配以 Thethe 开头的字符串.

例如, (at\.)$ 匹配以 at. 结尾的字符串.

2.简写字符集

正则表达式提供一些常用的字符集简写. 如下:

简写 描述
. 除换行符外的所有字符
\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 行终止符

3.零宽度断言(前后预查)

先行断言用于判断所匹配的格式是否在另一个确定的格式之前, 匹配结果不包含该确定格式(仅作为约束).

例如, 我们想要获得所有跟在 $ 符号后的数字, 我们可以使用正后发断言 (?<=\$)[0-9\.]*. 这个表达式匹配 $ 开头, 之后跟着 0,1,2,3,4,5,6,7,8,9,. 这些字符可以出现大于等于 0 次.

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

例如, 表达式 (T|t)he(?=\sfat) 匹配 Thethe, 在括号中我们又定义了正先行断言 (?=\sfat) ,即 Thethe 后面紧跟着 (空格)fat.

表达式 (T|t)he(?!\sfat) 匹配 Thethe, 且其后不跟着 (空格)fat.

例如, 表达式 (?<=(T|t)he\s)(fat|mat) 匹配 fatmat, 且其前跟着 Thethe.

例如, 表达式 (? 匹配 cat, 且其前不跟着 Thethe.

4.标志

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

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

例如, 表达式 /The/gi 表示在全局搜索 The, 在后面的 i 将其条件修改为忽略大小写, 则变成搜索 theThe, g 表示全局搜索.

例如, 表达式 /.(at)/g 表示搜索 任意字符(除了换行) + at, 并返回全部结果.

例如, 表达式 /at(.)?$/gm 表示小写字符 a 后跟小写字符 t , 末尾可选除换行符外任意字符. 根据 m 修饰符, 现在表达式匹配每行的结尾.

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

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

你可能感兴趣的:(正则表达式小记录)