加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式快速入门

发布时间:2020-12-13 22:40:56 所属栏目:百科 来源:网络整理
导读:正则表达式快速入门 一元字符 ^,$,.,w,s,b,d 1.后面四个有相应的大写,表反义。 ^: 匹配行开头,只有当其在 “[]” 中表示 “ 非 ” 2.b :匹配单词的开始或结束,而 “.” 匹配除换行符外的任意字符。 eg:^.$: 匹配一个非空行; bstr: 匹配 str 开头

正则表达式快速入门

一元字符^,$,.,w,s,b,d

1.后面四个有相应的大写,表反义。

^:匹配行开头,只有当其在“[]”中表示

2.b:匹配单词的开始或结束,而“.”匹配除换行符外的任意字符。

eg:^.$:匹配一个非空行;

bstr:匹配str开头的字符串

二重复*,+,?,{}

请叫上面四位为四大金刚”~

*0个或多个;

+:1个或多个;

?:0个或1个;

{}有三种写法,{n},{n,}和{n,m},不赘述了~

注意:?在四种情况下为懒惰匹配

分别是在*,?,+,{}后面

eg:a.*b,匹配aabab,而a.*b匹配aabab

三“[]”表示字符类,就是里面只能选择其中的一个字符进行匹配

a[w]c可以匹配akc等;

A[w]c可以匹配acawcakc

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<组名>来引用。

1b(w)(d)12b:默认命名,可以匹配h1h1,但不能匹配h1d21就是代表前面被(w)捕获的内容!

2b(?<name>w+)bs+k<name>b,在.NETFramework下支持

八零宽断言

用于查找在某些内容(但并不包括这些内容)之前或之后的东西,再读一遍上面的,我肯定你现在还没弄清楚,要不再读一遍。。。(别打我~

1.(?=exp):零宽度正预测先行断言(死去吧,这么难记住,不记了!算了,记一下吧,以后装逼。。)它断言自身出现的位置的后面能匹配表达式exp,然后整个(?=exp)就是个条件!只有满足这个条件才能进行匹配。

如:Ilikesinginganddancing.bw+(?=ingb)可以匹配singdanc。注意,如果写成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)...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读