0x01 测试学习网站

用这个在线网站来测试正则表达式的使用,传送门

image-20240415225717801

网站还是很方便学习的,随便粘贴一段文本,选择语言风格就可以开始测试了,这里用PHP测试。

0x02 限定符Quantifiers

?限定符

代表前面的一个字符需要在表达式中出现0次或1次,也就是改字符在匹配中可有可无。

比如 used?能够匹配到used use

*限定符

代表前面的一个字符可以在表达式中出现任意次,也可以不出现,但不能是其他字符

比如 ab*c 可以匹配到ac abbbc abbbbbc,无法匹配 adc

+限定符

*一样,但是只会匹配出现一次及以上的。

{}限定符

允许在花括号内写上严格的限定出现次数,{2,6}匹配出现2到6次,{6}匹配出现6次,

{2,}则是匹配大于或者等于2次出现的字符。

多个字符的情况

如果要同时对多个连续的字符使用限定符,可以先把这些字符用小括号括起来。

0x03 “或”运算

可以用|来使用字符匹配的或

例如a (cat|dog)则是先匹配a加上空格,后面匹配cat或者dog都可以。

0x04 字符类[ ]

[]字符类模板,在中括号内填入需要匹配的字符,代表要求匹配的字符只能取自于它们,可以指定字符的范围。例如a-z A-Z 0-9。然后在后面加上限定符,指定匹配模式。

在开头加上^脱字符,代表匹配除了尖号后面列出的以外的字符。

0x05 元字符

正则表达式中大多元字符都是以反斜杠开头的

\d代表所有的数字字符

\w代表单词字符(英文,数字以及下划线)

\s代表空白符,同时包含Tab和换行符

把这些元字符大写后,代表取非。

\b代表单词字符的边界。例如这里的\b可以防止部分匹配,而是按照块匹配。

image-20240415234121325

.在正则表达式中是一个特殊字符,代表任意字符但不包含换行符。(若想匹配.这个字符,需要在前面加上反斜杠转义。

^a只会匹配行首的a,a$只会去匹配行尾的a

0x06 贪婪与懒惰匹配

image-20240415232949884

在这个例子中我们想去匹配尖括号以及里面的字符,然而因为.代表任意字符,把除了开头结尾的字符全部匹配进来了,这种匹配方式是默认的,称为贪婪匹配

解决方法是加上?

image-20240415233647680

会将默认的贪婪匹配切换为懒惰匹配。