这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战
限定符
"?" 代表其前面的一个字符需要出现0次或者1次
"*" 代表其前面的一个字符需要出现0次或多次
"+" 代表其前面的一个字符需要出现1次及以上
"{a}" 规定匹配次数为a次 用{a,b}可以限定范围
上述限定符都可用括号进行修改合并操作,在一个括号中的内容同等与一个字符
“或”运算
a (apple|peach)通过 " | " 可以匹配多个字符或字符串,只要其中一个被匹配到了就可以通过 注意在使用或运算时要充分使用括号来确定解决范围
字符类
想匹配由abc这三个字符组成的单词,可以写成 "[abc]+"
如果需要被匹配的字符种类过多
比如匹配1到26个字母的情况下就可以用 "-" 连接字符,写成 "[a-z]+"
如果在方括号的前面加一个^尖号(脱字符)则代表要求匹配除了尖号后列出的字符以外的字符
元字符
" \d " 数字字符
" \w " 单词字符(英文、数字及下划线)
" \s " 空白符(包括Tab和换行符)
" \D" 非数字字符
" \W" 非单词字符
" \S" 非空白字符
" . " 非换行符的任意字符
" \b" 单词的边界,会匹配到每个单词两边的位置
" ^ " 匹配行首
" $ " 匹配行尾
贪婪和懒惰匹配
"<.+?>" 用来匹配<p><html>这样的标签
这里如果使用 "<.+>" 将会把<p></p>中的内容,包括></之间的文本部分全部包裹进去,起不到识别标签的作用
此时在加号左边加上的问号会将正则表达式中默认的贪婪匹配(Greedy Match)切换为懒惰匹配(Lazy Match)此时匹配内容的范围将会缩小,当正则匹配到>时便会停止,只保留标签内容
最后推荐一个在线正则测试网站:regex101,这个网站可以实现很多正则的内容,可以切换不同语言,还是挺好用的