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