正则表达式:记录文本规则的代码,用来进行文本匹配的工具。
元字符:
\ b 代表单词的开始和结尾
. 除了换行符以外的任意字符
* 重复之前的字符任意次数以使得整个表达式得到匹配
\d 代表一个数字 ,\d{2} 代表数字重复两遍,\d+匹配一个或多个连续的数字,\d{5,12} 匹配5到12个数字
\w 匹配字母或数字或汉字或下划线
^$ 匹配字符串的开始和结束
\s 匹配任意个空白符
[ ] 用以自定义指定范围,如[)-]表示)或者-中的一个,[0-4]表示0到4的数字
字符转义:\\,\.,\*等
重复:*重复0次或更多,+重复一次或更多,?重复一次或0次,{n}重复n次,{n,}重复n次或更多,{n,m}重复n次到m次
分支条件:用|隔开即可。如 0\d{2}-\d{8}|0\d{3}-\d{7} 分别表示两位和三位的区号。
注意分支条件是从左往右一次判断,一旦匹配成功,则不再往下判断。
分组:用小括号形成字表达式,就可以指定其重复次数了。如IP表达式:(\d{1,3}\.){3}\d{1,3},更精确的表达式:((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)。
反义:除了某几个字符以外的任意字符都能匹配。\W,\S,\D,\B均是对应以上的除此之外的字符,[^x],[^aeior]除了这些字符之外的任意字符都能匹配。
向后引用:从左往右每个括号内的字表达式都获得一个组号依次为1、2、3... \1则表示对表达式1的引用。如\b(\w+)\b\s+\1\b 可以捕获重复单词。
也可以指定子表达式的组名。(?\w+)或者(?'Word'\w+),反向引用为 \k。
零宽断言:\b,^,$ 指定一个位置,该位置满足条件,称为零宽断言;
(?=exp) 零宽度正预测先行断言,断言自身后面出现的表达式能够匹配。如用\b\w+(?=ing\b)查找I'm singing while you're dancing 会返回dance和sing
(?<=exp) 零宽度正回顾后发断言,断言自身位置出现的前面能匹配表达式。如(?<=\bre)\w+\b 查找reading a book,将匹配ading。
负向零宽断言:
零宽度负预测先行断言(?!exp),如\b((?!abc)\w)+\b 匹配不包含连续字符串abc的单词;
零宽度负回顾后发断言(?。
注释:(?#comment)。
贪婪与懒惰。
贪婪:a.*b 匹配 aabab得到 aabab,尽可能匹配多的字符;
懒惰:a.*?b 匹配得到aab,尽可能少地匹配字符。
如 *?,+?,??(重复0到一次但尽可能少),{n,m},{n,}?。
平衡组递归匹配不介绍