什么是正则表达式?
正则表达式是一组由字母和符号组成的特殊文本,可以从一个基础字符串中根据一定的匹配模式替换文本中的字符串、验证表单、提取字符串等。
此正则表达式,可以匹配到 "2222-8_3" 但是匹配不到 "99*"
- 基本匹配
正则表达式是执行搜索时的格式,它由一些字母和数字组合而成。如正则表达式“123”匹配字符串“123”,它逐个字符与输入的正则正则表达式做比较。正则表达式对大小写敏感,所以“The”不会匹配“the”;
- 元字符
元字符不代表本身的字面意思,有其特殊含义。以下是元字符的介绍
元字符 | 元字符名称 | 描述 |
. | 点运算符 |
匹配任意单个字符,不匹配换行符。 比如 .ar 匹配任意一个字符后面跟着是ar的字符串。 |
[] | 字符集 |
方括号指定一个字符集,在方括号中使用连字符来指定字符集的范围。 比如表达式 [Tt]he 匹配the 和 The。ar[.] 匹配 ar. |
[^] | 否定字符集 |
^表示一个字符串的开头,但它在方括号的开头的时候,表示这个字符集是否定的。 比如[^c]ar 匹配一个后面跟着ar的除了c的任意字符,aaar是满足的,car是不满足的。 |
* | 重复次数 * |
在*之前的字符出现次数>=0。 比如,表达式 a*匹配0或多个以a开头的字符,along 是满足条件的。表达式[a-z]* 匹配一个行中所有以小写字母开头的字符串。 .* 可以匹配所有字符。 |
+ | 重复次数 + |
在+之前的字符出现次数>=1。 比如 c.+t 匹配以c开头t结尾中间跟着至少一个字符的字符串。 |
? | 重复次数 ? |
在?符号前面的字符为出现0次或1次。 比如 [T]?he 可以匹配字符串 he 和 The。 |
{n,m} | 量词 |
用例限定一个或一组字符可以重复出现的次数。 比如 [0-9]{2,3} 匹配最少2位最多3位0-9的数字;[0-9]{2,} 匹配最少2位数字;[0-9]{,9} 匹配最多3位数字; [0-9]{3} 匹配3位数字。 |
(xyz) | (...)特征标群 |
一组写在(...)中的子模式,(...)中包含的内容会被看成一个整体。 比如表达式(ab)* 匹配连续出现0或多个ab,而ab* 则匹配连续出现0或多个b; |
| | 或运算符 |
判断条件或。 比如(T|t)he|car 匹配 thear 或 Thear 或 thcar 或 Thcar |
转码特殊字符 | 反斜线在表达式中用于转码紧跟其后的字符。用于指定 { } [ ] / + * . $ ^ | ?这些特殊字符。 | |
^ | 锚点 :开头 |
^用来检查匹配字符串是否在所匹配字符串的开头。 比如 ^a 可以匹配abc但不能匹配 bcd;^(T|t)he 匹配以 The 或 the 开头的字符串。 |
$ | 锚点:结尾 |
$用来检查匹配字符串是否是最后一个。 比如(at.)$ 匹配以 at. 结尾的字符串 |
- 简写字符集
简写 | 描述 |
. | 除换行符以外的所有字符 |
w | 匹配所有的字符数字,相当于 [a-zA-Z0-9] |
W | 匹配所有非字母数字,即符号,相等于[^w] |
d | 匹配数字,相当于[0-9] |
D | 匹配非数字,相当于[^d] |
s | 匹配所有的空格字符,相当于[ f p{Z}] |
S | 匹配所有非空格字符,相当于[^s] |
f | 匹配一个换页符 |
匹配一个换行符 | |
匹配一个回车符 | |
匹配一个制表符 | |
v | 匹配一个垂直制表符 |
p | 匹配CR/LF,相当于 ,用来匹配DOS行终止符。 |
- 零宽度断言
此章节未看懂,后面再另起章节来阐述这个。
- 标志
标志也叫模式修正符,因为它可以修改表达式的搜索结果。
标志 | 描述 |
i |
忽略大小写 比如:/The/gi 表示在全局搜索 The,且忽略大小写。 |
g |
全局搜索 比如:表达式/.(at)/g 表示搜索任意字符(除换行符) + at,并返回全部结果。 |
m |
多行修饰符:锚点元字符^$工作范围在每行的起始 。 比如:/at(.)?$/m 标识每行匹配表达式 at(.)?$ |
- 贪婪匹配与惰性匹配
正则表达式默认采用贪婪匹配模式,会匹配尽可能长的子串,使用?将贪婪匹配转为惰性匹配。如/(.*at)/ 和 /(.*?at)/
参考:https://mp.weixin.qq.com/s/8hNSOF9He8uAEupRucyo-w