一、定义:正则表达式就是一串能够匹配某种规则的字符。
二、各种元字符
@H_404_4@
(1)重复次数
@H_404_4@
1、*:表明某个字符的任意数量,例如:.*:表明除换行符外的任意字符连续出现任意次
@H_404_4@
2、{2},{2,5},{2,}:前一个字符连续出现的次数,例如:a{2},字符a连续出现2次,\d{2,5}:连续出现2到5个任意数字。\d{2,}:重复2次或更多次。
@H_404_4@
3、+:类似于*,只不过*可以重复0次,而+至少要重复一次。
@H_404_4@
4、?:重复0次或一次。
@H_404_4@
5、*?:重复任意次,但尽可能少重复
@H_404_4@
6、+?:重复1次或更多次,但尽可能少重复
@H_404_4@
7、??:重复0次或1次,但尽可能少重复
@H_404_4@
8、{n,m}?:重复n到m次,但尽可能少重复
@H_404_4@
9、{n,}?:重复n次或更多次,但尽可能少重复
@H_404_4@
(2)匹配字符
@H_404_4@
1、.(点):匹配除了换行符以外的任意字符。
@H_404_4@
2、\d:匹配一个数字
@H_404_4@
3、\D:匹配任意非数字的字符。
@H_404_4@
3、\s:匹配任意的空白符,例如空格,制表符,换行符等。
@H_404_4@
4、\S:匹配任意不是空白符的字符。
@H_404_4@
4、\w:匹配字母或数字或下划线或汉字等。
@H_404_4@
5、\W:匹配任意不是字母,数字,下划线,汉字的字符,
@H_404_4@
5、[]:划分出一个指定的匹配范围,例如:[1-3]:匹配1到3的任意一个数字,[aeIoU]匹配a,e,i,o,u中的任意一个,[1-3a-c]:匹配1到3,a到c的任意一个
@H_404_4@
(3)子表达式
@H_404_4@
1、():指定一个子表达式,例如(\d{1,3}\.){3}\d{1,3}:显示将\d{1,3}\.作为一个子表达式重复3次,在跟上1到3个数字,这是一个简单的IP地址匹配表达式
@H_404_4@
2、\1:每一个子表达式都会自动分配一个组名,例如:\1:1就是组名,\1表示第一组,组名也可以指定.
@H_404_4@
3、(?<Word>\w+)或(?‘Word’\w+):给子表达式指定组名,word为组名。
@H_404_4@
(4)捕获
@H_404_4@
1、(exp):匹配exp,并捕获文本到自动命名的组里。
@H_404_4@
2、(?<name>exp):匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp).
@H_404_4@
3、(?:exp):匹配exp,不捕获匹配的文本,也不给此分组分配组号。
@H_404_4@
(5)零宽断言
@H_404_4@
1、(?=exp):匹配exp前面的位置,断言自身出现的位置的后面能匹配表达式exp,例如:\b\w+(?=ing\b):匹配以ing结尾的单词的前面部分(即除了ing意外的部分),如查找I like singing,它会匹配sing
@H_404_4@
2、(?<=exp):匹配exp后面的位置,它断言自身出现的位置的前面能匹配表达式exp,例如:(?<=\bre)\w+\b:匹配以re开头的单词的后半部分(即除了re以外的部分),如查找reading a book时,它会匹配ading。
@H_404_4@
3、(?!exp):匹配后面跟的不是exp的位置
@H_404_4@
4、(?<!exp):匹配前面不是exp的位置
@H_404_4@
(6)负向零宽断言:只匹配一个位置,并不消费任何字符,例如a[^u]\w:如果出现非u的字符,就会匹配上,awd,结果会是awd,如果使用负向零宽断言a(?!u)\w,结果会是:aw,(?!u)不占用一个字符的位置
@H_404_4@
1、(?!exp):零宽度负预测先行断言,断言此位置的后面不能匹配表达式exp,例如a(?!u)\w:查找awd,结果会是aw
@H_404_4@
2、(?<!exp):零宽度正回顾后发断言,断言此位置的前面不能匹配表达式exp:(?<![a-z]\d{7}匹配前面不是小写字母的七位数字。
@H_404_4@
(7)注释
@H_404_4@
1、(?#comment):这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读。
@H_404_4@
(7)其他
@H_404_4@
1、\b:限界符,表明一个word的开始和结尾,例如:\bhi\b,表明能够完全匹配hi的正则表达式
@H_404_4@
2、\B:匹配不是单词开头或结束的位置。
@H_404_4@
2、^:匹配字符串的开始。
@H_404_4@
3、[^x]:匹配除了x以外的任意字符。
@H_404_4@
4、[^aeIoU]:匹配除了aeIoU这几个字母以外的任意字符。
@H_404_4@
3、$:匹配字符串的结束。
@H_404_4@
4、\:转义字符,可以用来取消一些字符的特殊意义,例如:\*:表示*本身,而不是元字符*,
@H_404_4@
三、贪婪与懒惰
@H_404_4@
1、贪婪匹配:当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。考虑这个表达式:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab,这被称为贪婪匹配
@H_404_4@