一个神奇高效的工具-正则表达式(二)
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
相关文章推荐
- 一个神奇高效的工具-正则表达式(一)
- 一个神奇高效的工具-正则表达式(四)
- 一个神奇高效的工具-正则表达式(五)
- 一个神奇高效的工具-正则表达式(三)
- 一个神奇高效的工具-正则表达式(六)
- 一个测试Javascript正则表达式的在线工具
- Java 小例子:一个测试正则表达式的工具
- 推荐一个正则表达式的工具RegexBuddy
- 转一个正则表达式的工具,很好用.
- 写了一个测试正则表达式的小工具
- Java 小例子:一个测试正则表达式的工具
- 自己动手写一个轻巧,高效的正则表达式引擎
- 一个正则表达式的小工具--myRegexHelper
- 一个帮助你了解javascript正则表达式的工具类型网站
- 一个不错的正则表达式分析工具
- 正则表达式在ff与ie下的一个神奇差异
- 一个正则表达式的小工具--myRegexHelper
- 发布一个自己写的文件重命名工具,支持正则表达式替换和自定义规则。
- 推荐一个好用的正则表达式在线生成工具
- 【每天一个Linux命令】17. 强大的文件搜索工具grep&&正则表达式