正则表达式快速入门

学习源视频:奇乐编程学院-[Bilibili]
Note:XLY23333-[Blog]
NoteBy:Typora[Markdown] + $\rm\LaTeX$ Themes by:Keldos-Li-[Github]


限定符 [Quantifiers]

单个字符的限定

$\quad$限定符$\quad$ Description $\quad$Eg$\quad$ Egmeans
? ?前字符出现0或1次(?前字符可有可无) used? 查找所有use和used
* *前字符出现0多次(*前字符可有多次可无) ab?c 可查找abc,ac,abbbc等
+ +前字符出现1多次(+前字符可有一次或多次) ab+c 可查找abc,abbbc等
{<num>} 指定{…}前字符出现次数<num> ab{2}c 可查找abbc等
{<min>,<max>} 指定{…}前字符出现次数范围,可以缺省max ab{3,}c 可查找abbbbc,abbbc等

多个字符的限定

可以使用()将多个字符括起,随后操作同上方的单个字符限定

Eg:a(bc){1,2}d可以搜索 ‘abcd’ 和 ‘abcbcd’

或运算符 [OR Operation]

同时匹配所有出现的情况,只要有就匹配

Code: (<word1>|<words2>|<words3>|...)

使用()将或运算内容括起,用|将内容隔开,则括号中所有的内容执行或运算,均可以被查找到

Eg:a (cat|dog)可以搜索 ‘a cat’ 和 ‘a dog’ [注意:a后方的空格也算作检索内容]

字符类 [Character Classes]

匹配由指定字符所构成的内容,无需完全匹配,拥有其中之一即可

Code: [<char1><char2>...]并列查找由他们构成的内容

[<char1>-<char2>] 定义查找范围<char1>-<char2>

[^<char>]查找除了方括号的其他内容

Eg: [^\nA-Za-z]+ 查找所有的数字(非换行符,非大写字母,非小写字母)

元字符 [Meta-Characters]

$\quad$Meta-Char$\quad$ $\quad$Description$\quad$
\d 数字字符
\w 单词字符(英文字母+数字+下划线)
\s 空白符(TAB+换行符)
\D 非数字字符
\W 非单词字符
\S 非空白
. 任意字符(不包含换行符)
^<char> 匹配行首<char>
<char>$ 匹配行尾<char>
\b<chars>\b 规定该位置为单词边界,防止对超量的截取匹配
\B<chars>\B 规定该位置为非单词边界

如果要使用.则可以通过转义后的\.进行匹配

贪婪与懒惰匹配 [Greedy vs Lazy Match]

假设对一下的html内容,需要匹配<center></center>>

1
<center>TEXT</center>

如果使用<.+>,由于><同样属于.,所以将匹配整行的全部代码

可以将代码更改为<.+?>由贪婪模式匹配为懒惰匹配,从而精确匹配

也可以在不切换模式的情况下,改用<[^<>]+>去掉可能出现的><查找

实战练习

匹配16进制的颜色值

颜色值#开头,为十六进制(由0~9,a~f,A~F构成),共6位字符

IPv4 地址匹配

IPv4由四段数字组成,中间由符号.隔开,且数字的范围为0~255