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

正则表达式学习笔记(二)

发布时间:2020-12-14 01:13:57 所属栏目:百科 来源:网络整理
导读:字符转义 如何在目标字符串里面查找元字符呢?比如 ”.””*” ,如果直接在正则表达式里面直接使用肯定是不行的。 正则表达式这里处理的办法和 一般编程语言处理方式相类似,直接使用 来取消它的元字符地位,于是,可以在元字符里面可以这样使用: ”.”
  • 字符转义

如何在目标字符串里面查找元字符呢?比如”.””*”,如果直接在正则表达式里面直接使用肯定是不行的。

正则表达式这里处理的办法和 一般编程语言处理方式相类似,直接使用来取消它的元字符地位,于是,可以在元字符里面可以这样使用:”.”或者”*”

  • 查找未被预定义的字符

标题的意思是说,如果想要查找的字符没有相对应的元字符来处理怎么办?在正则表达式里面我们使用中括号[]来处理,你只要在中括号里面列举你想要查找的字符就可以了。例如查找0~9的数字和w字符:

wKiom1V1OL7zfWVLAABO4jc-IqU880.jpg

  • 分支条件

首先来看一个例子:

(?0d{2}[) -]?d{8}

上面的()也是元字符,这里使用了转义符,后面跟了?符号,所以表示的查找的就是有括号或者没有括号开头的字符串。分解如下:

(? 0d{2}[) -]? d{8}

可以匹配类似于(010)88886666022-22334455 02912345678等多种字符串。如果你想要查找电话号码的话,那就问题大了,因上面这个表达式还有可能匹配类似于010)12345678(022-87654321这种字符串。

怎么解决上面的问题呢?

答案当然是给上述的正则表达式使用更加精准的限制条件。这里我们使用分支条件。

所谓分支条件是指:多种规则并列共同构成一个正则表达式,只要字符串匹配符合其中一个规则,就算找到一个字符串,多个规则之间使用|符号来分开。

以上面的例子来说明:(0d{2})[- ]?d{8}|0d{2}[- ]?d{8}

wKiom1V1ONXibbh3AADP_p5VlNY805.jpg

在使用分支条件的时候,要注意各个条件之间的顺序,因为正则表达式工作的时候是从左到右来匹配的,如果某个字符串符合第一条规则,就直接跳出了,不会再去管。例如可以比较试下d{5}-d{4}|d{5}d{5}|d{5}-d{4}的区别。

  • 分组

先来看两个例子:

d{3}表示数字重复三次。

w{4}表示匹配4位字符的单词(w的意义表示0~9A~Za~z等请看前章节)。

现在,提问:要是想指定HG这两个字符重复多次怎么办?或者其他任意指定的字符重复多次怎么办?

正则表达式里面使用 分组 来解决这个问题。

分组,或者叫做子表达式,在正则表达式里面使用小括号来指定,包含在小括号里面的字符就是一个分组,你可以对它们的重复次数做处理。小括号前面说过,也是元字符。

例如,匹配IP地址:

(d{1,3}.){3}d{1,3}

可以这样分解:

(d{1,3}.){3} d{1,3}

小括号里面的意思是1~3位数字外加一个点;小括号后面跟了个{3}表示子表达式必须重复3次。橙色的表示1~3位数字。

wKioL1V1OougRIvvAABcJAJHAHs802.jpg

  • 反义

前面已经提到了分组这个好东西,用着也还顺手,现在又有新的问题了,万一我想查找a~z,A~Z52个字符怎么办?难道要将他们全部都写进子表达式么?有没有好的办法呢?这里使用到了反义。

联系前面学过的元字符,反义其实就是把他们的元字符大写。具体如下:

代码

详解

W

匹配任意不是字母,数字,下划线,汉字等等的字符

S

匹配任意不是空白符的字符

D

匹配任意不是数字的字符

B

匹配任意不是单词开头或者结尾的位置

[^X]

匹配除了X以外的任意字符

[^aieou]

匹配除了aieou几个字母以外的任意字符

例如:S+表示不包含空白符的字符串(至少有一个字符)。

(编辑:李大同)

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

    推荐文章
      热点阅读