1、反义字符
先来讲一下字符的转义,如果你想查询一些符号,却刚好就是一些字符的符号,这个时候正则表达式会误以为是元字符或者是限定符之类的符号,你指定不了它,因为他们会被正则表达式解释成了其他的意思。这个时候你就要在符号的前面加一个\来取消这些字符的特殊意义。所以,例如当你要使用.或者*类似的特殊符号的时候,你应该是.或者*这样的写法。如果要查询\本身的话,那你也得要用两个\。
有时候需要查找除了数字字符类以外的字符,这个时候就要用到反义字符:
\W(匹配任意本身字母,数字,下划线,汉字的字符)
\S(匹配任意不是空白符的字符) \D(匹配任意不是数字的字符)
\B(匹配不是单词开头或者结束的位置) [^x](匹配除了x以外的任意字符)
[^luck](匹配除了luck这几个字符以外的任意字符)
2、零宽断言
用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像\b,^,$那样用于指定一个位置,这个位置应该满足一定条件(断言),因此他们被称为零宽断言。
(?=exp)也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp。比如\b\w+(?=you\b),匹配以you结尾的单词的前面的位置,比如查找 I MISS you的时候,它会匹配I MISS。
(?<exp)也叫做零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp,比如(?<=\bre)\w+\b会匹配以bre开头的单词的后半部分,例如在查找reading a book的时候,它会匹配ading。
3、懒惰限定符
当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。考虑这个表达式:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。
*?(重复任意次,但尽量少重复)
+?(重复1次或者更多次,但尽量少重复)
??(重复0次或者1次,但尽量少重复)
{n,m}?(重复n到m次,但尽量少重复)
{n,}?(重复n次以上,但尽量少重复)
正则表达式基础
最新推荐文章于 2021-12-19 21:19:04 发布