正则表达式
0x01 测试学习网站
用这个在线网站来测试正则表达式的使用,传送门
网站还是很方便学习的,随便粘贴一段文本,选择语言风格就可以开始测试了,这里用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
可以防止部分匹配,而是按照块匹配。
.
在正则表达式中是一个特殊字符,代表任意字符但不包含换行符。(若想匹配.
这个字符,需要在前面加上反斜杠转义。
^a
只会匹配行首的a,a$
只会去匹配行尾的a
0x06 贪婪与懒惰匹配
在这个例子中我们想去匹配尖括号以及里面的字符,然而因为.
代表任意字符,把除了开头结尾的字符全部匹配进来了,这种匹配方式是默认的,称为贪婪匹配
解决方法是加上?
会将默认的贪婪匹配切换为懒惰匹配。