正则表达式学习笔记
概念
正则表达式是一种从左到右匹配字符串的一种模式。
元字符
特殊含义的字符。
元字符 | 描述 |
---|---|
. | 匹配任意单个字符(除了换行符) |
[] | 匹配方括号内任意字符 |
[^] | 上面的否定,匹配除了里面内的任意字符 |
* | 匹配任意个(可以是0)*号前面的字符 |
+ | 匹配>=1个符号前面的字符 |
? | 符号前面的字符可选 |
{n,m} | 匹配num个前面的字符或者字符集(n<=m<=m) |
(xyz) | 可以理解为数学公式中的括号,括号内的为一体,比如(abc)* <=> abc/abcabc/… |
| | 或运算符 |
\ | 转义字符,匹配保留字符使用,比如\[ 就代表[ |
^ | 行首,表示从开始行开始匹配 |
$ | 行尾,从行尾开始匹配 |
简写字符集
正则表达式提供一些常用的字符集简写。
简写 | 描述 |
---|---|
\w | 匹配所有字母数组,等同于[a-zA-Z0-9] |
\W | 匹配所有非字母数组(符号),等同于[^\w] |
\d | 匹配数字,等同于[0-9] |
\D | 匹配非数字,等同于[^\d] |
\s | 匹配所有空格字符,等同于[\t\n\f\r\p]{Z} |
\S | 匹配所有非空格字符 |
\f | 换页符 |
\n | 换行符 |
\r | 回车符 |
\t | 制表符 |
\v | 垂直制表符(???) |
\p | 匹配CR/LF(即\r\n),用来匹配DOS行终止符(可以用来替换成unix换行符\n) |
零宽度断言
判断所匹配的格式是否在另一个确定的格式之前(后)。
比如:(?<=M)[0-9\.]*
是一个正后发断言,匹配的是在字符M之后包含任意个数字的字符。
负后发则相反,(?<!M)[0-9\.]*
匹配的是M后不包含数字的字符
先行和后发的区别则是之前和之后
符号 | 描述 | 举例 |
---|---|---|
?= | 正先行断言-存在 | [0-9\.](?=M) |
?! | 负先行断言-排除 | [0-9\.](?!M) |
?<= | 正后发断言-存在 | (?<=M)[0-9\.]* |
?<! | 负后发断言-排除 | (?<!M)[0-9\.]* |
标志
模式修正符,可以更改模式。
标志 | 描述 | 示例 |
---|---|---|
i | 忽略大小写 | the/i <=> [Tt][Hh][Ee] |
g | 全局搜索 | The/g (vim替换时候使用比较多) |
m | 多行修饰符:在使用^与$时候用到(不用只能匹配一行?) | The$/m(emmm,得到多个?) |
注:我用/m并没有得到实际效果,实际不用就可以,可能看具体情况,记录一下吧
贪婪匹配和惰性匹配
正则表达式默认是贪婪匹配模式(匹配尽可能长的字符串)。
?
可以帮助我们转换成惰性匹配模式。
/(.*at)/
=> The fat cat sat on the mat .
惰性匹配:(只匹配到第一次匹配的地方就结束)
/(.*?at)/
=> The fat cat sat on the mat.