正则表达式备忘录
人还是要学点正则的【反正学了就忘,忘了再学
普通字符
- 字母、数字、汉字、下划线以及没有特殊定义的标点符号,都是“普通字符”。
- 表达式的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。
“多种字符”表达式
表达式 | 描述 |
---|---|
\d | 0~9中任意一个数字 |
\w | 任意一个字母或数字或下划线,即AZ、az、0~9、_ 中任意一个 |
\s | 包括空格、制表符换页符等空白字符的其中任意一个 |
. | 匹配除换行符(\n)以外的任意一个字符 |
简单的转义字符
表达式 | 描述 |
---|---|
\r,\n | 代表回车和换行符 |
\t | 制表符 |
|代表“\”本身 | |
^ | 代表^符号本身 |
$ | 代表$符号本身 |
. | 代表小数点.本身 |
自定义“多种字符”表达式
- []方括号包含一系列字符,能够匹配其中任意一个字符。
- 用[^]包含一系列字符,则能够匹配其中字符之外的任意一个字符。
表达式 | 描述 |
---|---|
[ab5@] | 匹配"a"或"b"或"5"或"@" |
[^abc] | 匹配"a","b","c"之外的任意一个字符 |
[f-k] | 匹配"f"~"k"之间的任意一个字母 |
[^A-F0-3] | 匹配"A""F","0""3"之外的任意一个字符 |
量词
表达式 | 描述 |
---|---|
表达式重复n次,如"a{5}"相当于"aaaaa" | |
表达式至少重复m次,最多重复n次 | |
表达式至少重复m次 | |
? | 表达式出现0此或1次,相当于 |
+ | 表达式至少出现1次,相当于 |
* | 表达式出现0次或1次或多次,相当于 |
示例
- 表达式"\d+\.?\d",匹配"It costs $12.5"
- 表达式"go{2,8}gle",匹配"Ads by gooooooooogle"
抽象意义的特殊符号
表达式 | 描述 |
---|---|
^ | 与字符串开始的地方匹配,不匹配字符 |
$ | 与字符串结束的地方匹配,不匹配字符 |
| | 左右两边表达式之间“或”关系,匹配左边或右边 |
() | (1)在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰,(2)取匹配结果的时候,括号中的表达式匹配的内容可以被单独得到 |
示例
- 表达式"^aaa"匹配“aaa xxx xxx”,不匹配“xxx aaa xxx”
- 表达式"Tom|Jack"匹配字符串"I'm Tom, he is Jack."
贪婪/非贪婪
- 在量词后边加上"?"问号,可以使匹配次数不定的表达式尽可能少的匹配,即“非贪婪”模式。
- 默认是贪婪模式,即匹配次数尽可能多。
示例
-
例1:(d)(\w+)(d)匹配"dxxxdxxd"结果为:dxxxdxxd。
-
例2:(d)(\w+?)(d)匹配"dxxxdxxd"结果为:dxxxd。
例2中匹配完1-5个字符的dxxxd之后,就从第6个字符开始匹配了,不是从第2个字符开始再重新匹配。
-
例3:(d)(\w+?)(d)匹配"dxxxddxxd"结果为:dxxxd、dxxd。
反向引用
-
小括号包含的表达式所匹配到的字符串在匹配过程中可以使用。表达式后边的部分可以引用前边括号内的子匹配已经匹配到的字符串。
-
引用方法:“\”加上一个数字。
e.g. "\2"引用第2对括号内匹配到的字符串 -
当匹配中的分组有嵌套时,是从外向里匹配的,其次在由左向右匹配。
e.g."^((\d)3)\1[0-9](\d)\2{2}$"
首先匹配((\d)3)这整个部分,其次匹配((\d)3)里面的(\d),第三次匹配时最后一个\2前面的(\d),所以\2指的是((\d)3)里的\d。
提取匹配内容的一部分
(?<=要提取的匹配内容之前的匹配内容)要提取的匹配内容(?=要提取的匹配内容之后的匹配内容)
示例
(?<=Avg (all users)😂[^k]+?(?=,) 匹配 Add photographer to your favorites,Place:,53 out of 131,Avg (all users):,5.6964,Avg (commenters):,8.0000,Avg (participants):,5.7805, 结果为 5.6964