正则表达式学习笔记

正则表达式学习笔记

概念

正则表达式是一种从左到右匹配字符串的一种模式。

元字符

特殊含义的字符。

元字符 描述
. 匹配任意单个字符(除了换行符)
[] 匹配方括号内任意字符
[^] 上面的否定,匹配除了里面内的任意字符
* 匹配任意个(可以是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.

-------------本文结束,感谢您的阅读-------------