正则表达式快速入门
正则表达式快速入门一元字符^,$,.,w,s,b,d 1.后面四个有相应的大写,表反义。 ^:匹配行开头,只有当其在“[]”中表示“非” 2.b:匹配单词的开始或结束,而“.”匹配除换行符外的任意字符。 eg:^.$:匹配一个非空行; bstr:匹配str开头的字符串
二重复*,+,?,{} 请叫上面四位为“四大金刚”~ *:0个或多个; +:1个或多个; ?:0个或1个; {}有三种写法,{n},{n,}和{n,m},不赘述了~ 注意:?在四种情况下为懒惰匹配 分别是在*,?,+,{}后面 eg:a.*b,匹配aabab,而a.*?b匹配aab和ab
三“[]”表示字符类,就是里面只能选择其中的一个字符进行匹配 a[w]c可以匹配akc等; A[w]c可以匹配ac或awc或akc等 “w”表示“”和任意的单词(w) 高级总结: 也就是说在“[]”内,“.”,“*”,“?”和“{}”都表示本身,没有任何特殊的含义。因为“[]”里面是字符类啊!只能是一个个字符组成!像以上四种都不能惟一确定是一个字符(他们有的是0个或是多个),故在[]内表是本身,无特殊含义。然而,像w,d等,只能表示一个字符(如d表示0~9中的任何一个数字),他们在[]中有着元字符本身的含义,而像前面所说的“四大金刚”都已蜕化成本身了~~ 此外,“-”在“[]”中表示字符的范围,如[0-6]表示0~6的任意一个数字。
四转义 一言以蔽之:“四大金刚”,外加一些特殊含义的字符如:^,{,(,,|等。 因为他们有着特殊的含义,但是如果我就是要匹配他们自身呢?这时就要用到“”了! 如“”匹配字符“”
五分支条件:“|” 匹配左侧或是右侧,首先匹配左侧,只有当左侧不匹配时才匹配右侧。 很简单的吧,你应该理解了~~那不举例子了哈
六分组“()” 前面都是讲单个字符匹配(0次或多次),那么怎样才能匹配多个字符呢? 佛祖说:孩子,把这些多个字符用括号括起来吧~~ 如:(d{1,3}.){3}匹配“1~3个数字,并且重复3次”,31.23.432之类的
注意:这里再次说明“[]”与“()”的区别,前者称为字符类,匹配其内的单个字符,侯泽华称为分组,匹配多个字符。前者只匹配[]中的一个!后者要匹配括号中的所有。因此,不能有[d{3}(ab)?]之类的东西出现。
七反向引用(后向引用) 用于重复搜索前面某个分组匹配的文本(该文本已被捕获,等待后面引用),组的序号或是名字标明,默认自动分配时按数字来标示,并且从1开始。 如:b(w+)bs+1b可以匹配两个相同的单词的字符串,并且两个单词之间有一个或多个空格,如trytry等 也可以自己指定组名(.NETFramework下支持) 格式:(?<组名>原有基础)或是(?’组名’原有基础) 对于自定义的组名要用k<组名>来引用。 如 1:b(w)(d)12b:默认命名,可以匹配h1h1,但不能匹配h1d2,1就是代表前面被(w)捕获的内容! 2:b(?<name>w+)bs+k<name>b,在.NETFramework下支持
八零宽断言 用于查找在某些内容(但并不包括这些内容)之前或之后的东西,再读一遍上面的,我肯定你现在还没弄清楚,要不再读一遍。。。(别打我~) 1.(?=exp):零宽度正预测先行断言(死去吧,这么难记住,不记了!算了,记一下吧,以后装逼。。)它断言自身出现的位置的后面能匹配表达式exp,然后整个(?=exp)就是个条件!只有满足这个条件才能进行匹配。 如:Ilikesinginganddancing.bw+(?=ingb)可以匹配sing和danc。注意,如果写成bw+(?=ing)b则没有匹配项。 再来理解一遍:(?=ingb)表示的是在这个表达式的位置处应该是以“ing”结尾的单词。注意的是,整个(?=exp)没有代表任何东西!你要找以“ing”结尾的单词的前半部分,就要用w+来匹配! 2.(?<=exp)表示自身位置的前面呗~(啥,你说你想知道它的名字。。受不了,它叫。。零宽度正回顾后发断言。。很好记吧) 如:(?<=bwa)w+bI’mwatchingTV!匹配ching
八.5负向零宽度断言 和零宽度断言相对应,如果表示“没有exp”,则进行其前面或后面内容的匹配。 1.(?!exp)如d{3}(?!d)匹配3个数字(条件是这3个数字后面不能是数字) 2.(?<!exp)如b((?!abc)w+b匹配不包含连续字符串abc的单词。
高级总结:八和八.5如何总结呢? ?能=?前面< ?不能!④后面无 另外这四种前面都是以?开头的哦! 考考你,匹配该位置前面不能有数字咋写? 首先:? 其次:“前面”:< 再次:“不能有”:! 因此:....(?<!d)... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |