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

正则表达式学习(二)

发布时间:2020-12-14 01:30:07 所属栏目:百科 来源:网络整理
导读:反义: 反义,顾名思义就是和正常意思反着的。前面学习了许多规则,有没有想过有时候需要反过来,排除某些字符串。比如,不是数字的字符串,排除数字总比列出除掉数字的其他所有字符种类容易得多吧。 下面都是反义用法,都是基于前面基础上的。比如d表示0-9

反义:

反义,顾名思义就是和正常意思反着的。前面学习了许多规则,有没有想过有时候需要反过来,排除某些字符串。比如,不是数字的字符串,排除数字总比列出除掉数字的其他所有字符种类容易得多吧。

下面都是反义用法,都是基于前面基础上的。比如d表示0-9的数字,使用大写字符D是表示排除数字的字符。其他相似,用大写字符来表示反义。

D 排除所有数字

B 排除单词的开头和结尾的位置

S 排除所有空白位置(包括空格,制表符,换行符,中文全角空格)

W 排除所有数字,字母,下划线,中文等四种中的任何一种

[^f] 排除f字符,也就是匹配f字符以外的所有字符,

[^aeiou] 排除元音字符

<a[^<>]+>匹配尖括号括起来的以a开头的字符。

后向引用:

后向引用,从字面意思上来理解也就是从后面引用前面的内容。实际上也就是这样的。这里的引用场景为分组,一个分组可能在后面还可能会用到,这里说的用到,不是像之前说的IP地址那样,是三个连续的使用,使用{n}的方式就能重复。这里的重复是隔开的,中间有其他内容时的重复。

如go go,Kitty Kitty,这样的,重复,虽然是相同重复,但中间隔着空白符。

这样就是使用后向引用的时候了。

如上所说,后向引用用于分组。如b(w+)bs+1b,这个表达式可以表示上面的gogo或者Kitty Kitty这样的情况。(w+)是一个分组,后面用1再次使用。1代表分组的顺序为1。(至于为什么是1,而不是0,后面再解释)

给分组指定组名

如上面1,每个分组在一个正则表达式里面是有序号的,可能有时候数序号太麻烦或者会搞错,那自己指定一个分组名,就不会搞错了。

指定分组名,通过(?<word>w+)或者(?’word’w+)的方式指定,使用?加尖括号或者单引号指定分组名,如上,word就是分组名。

把上面的b(w+)bs+1b改写一下就是

b(?<word>w+)s+k<word>b

(注意:使用分组名时使用k<word>的形式在后面引用。记得加上k,同时分组名使用的符号应当和前面指定的相同)

分组顺序:

0代表整个表达式

分组分为两遍,第一遍给没有指定名字的分组分配组号,第二遍才是给有指定名字的分组分配组号。

常用分组用法:

(exp)匹配exp,并捕获文本到自动分配的组里

(?<name>exp) 匹配exp,并捕获文本到name组里

(?:exp) 匹配exp,不捕获匹配的文本,也不给次分组分配组号。

(?=exp) 匹配exp前面的位置

(?<=exp) 匹配exp后面的位置

(?!exp) 匹配后面跟的不是exp的位置

(?<!exp) 匹配前面跟的不是exp的位置

(?#comenet) 注释,不匹配文本内容。

解释:

(?=exp) 匹配exp前面的位置。

如bw+(?=ingb) 匹配以ing结尾的单词,如beginning,dancing等前面部分,begin,danc。

(?<=exp) 匹配exp后面的位置。

如(?<=bre)w+ 匹配前面带re的单词的后面部分,如reback,匹配back部分。

而(?!exp)和(?<!exp)两个则跟上面两个相反,匹配的是前面或者后面跟的不是exp的位置。

注意:(?=exp),(?<=exp),(?!exp),(?<!exp)四个都属于断言类型,获取的是一个位置,而非字符串内容,它不占用字符,只是匹配得到一个位置。

例:如果我们要匹配一个单词,这个单词中要包含q同时q的后面不能是u。正则表达式怎么写?

常规想法: bw*q[^u]w*b,嗯,包含q排除u,看着没错,但是仔细一想,[^u]是样占用一个字符的啊,如果这个字符是个单词没事,要是个空格或者逗号之类的怎么办?如Iraq,Benq,这两个单词中间隔着一个逗号,想想上面的表达式,排除u就行,这个字符串也满足啊。所以这样不行。

这时,断言就能派上用场了,你不是只是想要一个包含q,且后面不能是u的单词吗,上面排除方法会占用一个字符位置,我改用断言匹配一个位置不就好了嘛。

改一下,就是 bw*q(?!u)w*b

(编辑:李大同)

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

    推荐文章
      热点阅读