您的位置:首页 > 其它

一个神奇高效的工具-正则表达式(二)

2017-06-25 19:06 267 查看

回顾上一篇

一个神奇高效的工具-正则表达式(一)

多个字符的匹配

上一节,我们介绍了如何匹配纯文本和任意字符。但是绝大多数情况,我们匹配的模式是既不是固定的某一个字符或者字符串,也不是说任意字符都可以,通常我们会去匹配我们指定范围的字符集合,本节会着重地介绍字符集合的匹配模式。

多选一

指定多选一

先看一下如下的场景:

aa
ba
cc
dd


找出所有的以a为结尾的字符

模式:.a


此时,如果在待匹配中增加一个ea,但是你此时仍然只想找出aa和ba,使用任意字符就不合适了,这里介绍元字符的成员

模式:[ab]a


元字符’[’ 和 ‘]’,在使用’[’ 和 ‘]’定义的字符集合里,匹配的结果会任意选择其中一个作为匹配的文本。

[ab]a并不是最完善的匹配,如果我们增加一个bac,那么也会被匹配。有时候,验证某个模式能不能得到预期的匹配并不难,但是验证它能不能匹配到你不想要的东西就比较困难了。

再举一个类似的例子

Apple is a fruit, my dad likes apple.


找出所有的苹果的单词

模式:[Aa]pple


这样,大写小写开头的苹果单词都会被匹配

区间多选一

上面说到的指定集合多选一,存在一个问题,就是集合过多的时候,逐个枚举会显得很笨重,这样也就失去了正则表达式的初衷。接下来我们介绍一种利用区间来指定集合的模式

看下面这个例子:

1.c
2.c
3.c
4.c
5.c
8.c
9.c
a.c
b.c


匹配所有以数字为文件名的c文件

模式:[0123456789]\.c


汗,笨重的写法总是让人很反感,类似数字集合,大写字母集合,小写字母集合,都是很常见的匹配模式,当然有更简单的写法

模式:[0-9] [A-Z] [a-z] [A-H]


模式[0-9] 完全等价于 [0123456789] ,其他类推,当然也可以组合使用[0-9A-Za-z]代表所有的数字和字母集合,很明显的 ‘-‘也是元字符,但是中能在’[’ 和 ‘]’之间进行使用

取非匹配

匹配可以指定我需要什么,当然也可以指定我不需要什么了,这时往往需要取非匹配模式。举个例子:

0B
1k
2M
3G
4T


匹配除了M级别的内容大小

模式:.[BMGT]


正如前面所说,正则表达式往往有很多种方法来获得你想要的结果

我们也可以用元字符’^’来表示取非,即我不要匹配某个字符,如下:

模式:.[^M]


^常常存在于集合中,而且取非的内容是整个集合,例如:[^a-z]为不匹配所有小写字母

总结

本节我们介绍了多对一的匹配以及取非模式,元字符’[‘,’]’,’-‘和’^’,下一节,我们会着重介绍使用元字符的模式

我的个人博客,欢迎拍砖:codingsj.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  正则表达式