【一】神秘的宝藏
话说编程世界里各派明争暗斗不断,只因所有帮派都在争夺一个名为“主流语言”的绝世宝藏,据说谁得到它就可以称霸武林、一统天下……
某日武林大会之上,各派又在讨论寻宝一事。拥趸最多的Java率先发言:凭我“面向对象”如此雄厚的家庭背景,和我的绝杀技——“跨平台应用”剑法。谁能比的了我?这宝藏非我莫属。
此语一出,顿时四座皆惊。首先资历最老的C语言就发话了:年轻人,切勿鲁莽。先不说我家的祖传技法移花接木(同时具有高级语言和汇编语言的特点),单说数据处理和编写系统软件的本领,你还嫩了点。而且不巧犬子的母亲同属“面向对象”家族。
C语言身后的C++听到这话顿时高傲地扬起了头。血统纯正的王子HTML5(HTML5是用于构建因特网的核心技术的标准语言)也鄙夷地看了JAVA一眼。
正在这剑拔弩张之时,苹果家的Objective-C却发现了一个奇怪的人,自己在傻傻地研究乱七八糟地东西,于是他凑上前问了一句:“敢问兄台哪门哪派、师从何人?”语毕一个憨厚的脸抬了起来:“不才姓正则名表达式,你可以叫我小正哈哈。我无门无派,只因对一些匹配的东西略有涉猎,才会被拉进这武林大会之中。”
最后这种紧张的氛围还是被称作“胶水语言”的和事佬Python给化解了:“哎呀,咱们都很厉害都很厉害,要不然怎么能踏进这个屋子呢?既然这样,不如就一起去寻宝呀!”
虽然大家纷纷同意了,但各派都打着自己的算盘。只有天性纯良的小正游离于武林之外,似乎没有注意武林各派的争斗,一心研究着自己的东西……
【二】踏上寻宝之路
又说众人一同踏上寻宝之路。要说他们为何同意一起,皆因他们之前都独自尝试过无数次都没成功……
话说一行人行至“字符山”,该山怪石嶙峋、几无鸟声,诡异的氛围告诉他们:危险来了。
果然,领头的几位小将纷纷口吐白沫而亡,众人见此状也不敢前行了,于是都停留原地寻求解决办法。可是这些小兵都是刚刚踏入这座山,既没有喝此山的水、也没有采摘过野果之类的吃食,为何突然变成了这样呢?
各方大佬纷纷迷惑不解,这时一少年却径直走入那怪山之中,竟毫发未损!
正在众人纷纷惊愕不语时,一个稚嫩的声音响了起来:“小正哥哥,你好厉害呀!”却是苹果家的那小子正满脸艳羡。
少年这时也缓缓走了回来,略带羞涩地挠了挠头说:“其实也没什么,不过这座山上的机关我略有了解罢了。”
那咱们来细细说一说这正则表达式到底有什么本领呢?原来他有三绝:“测(测试字符串内的模式进行数据验证)”“换(替换文本)”“提(基于模式匹配从字符串中提取子字符串)”
(例如,您可能需要搜索整个网站,删除过时的材料,以及替换某些HTML 格式标记。在这种情况下,可以使用正则表达式来确定在每个文件中是否出现该材料或该 HTML 格式标记。此过程将受影响的文件列表缩小到包含需要删除或更改的材料的那些文件。然后可以使用正则表达式来删除过时的材料。最后,可以使用正则表达式来搜索和替换标记。)
再说说这时,趾高气扬的Java率先发问:“你这毛头小子当真能解这难题?”小正谦逊一笑,缓缓道来:“不才略通此术。过此山每一步都要走对,否则就会吸进此山特有的“匹配错误”毒气,然后口吐白沫而亡。虽然各大门派都有绝世武功在身,解锁一般的机关道法(对静态文本执行简单搜索和替换任务、提供与预期的搜索结果匹配的确切文本)当然不在话下,但此机关灵活性极高,若采用一同的方法去闯这个关(搜索动态文本),即使不是不可能,至少也会变得很困难。”
这时和事佬python焦急地询问:“那请问你能帮我们过去吗?”
“当然可以啦”小正笑眯眯地说。
接着,小正教给了每个人一套“防毒气法”——根据每个人的体质有略微的区别。也许因为python特别和气吧,小正教他教得特别认真,甚至将自己毕生所学倾囊相授(re 模块使 Python 语言拥有全部的正则表达式功能)——
P大叔,我教给你的是re气法里面有好多招数(函数),有compile、match、search、findall、finditer、split、sub和subn等。它有两种运法:
1)先将字符串形式编译为Pattern实例,然后使用Pattern实例处理文本并获得匹配结果(一个Match实例),最后使用Match实例获得信息,进行其他的操作
我一步步和你仔细说哦:
①re.compile(strPattern[, flag])
这个方法是Pattern类的工厂方法,用于将字符串形式的正则表达式编译为Pattern对象。 第二个参数flag是匹配模式,取值可以使用按位或运算符'|'表示同时生效,比如re.I | re.M。
②Match(Match对象是一次匹配的结果,包含了很多关于此次匹配的信息,可以使用Match提供的可读属性或方法来获取这些信息)
③Pattern
Pattern对象是一个编译好的正则表达式,通过Pattern提供的一系列方法可以对文本进行匹配查找。Pattern不能直接实例化,必须使用re.compile()进行构造。Pattern提供了几个可读属性用于获取表达式的相关信息:
2)直接用re.match,re.search和re.findall等函数直接对文本匹配查找
①re.match函数
只匹配字符串的起始位置,如果不成功的话就返回none
②re.search方法
re.search 扫描整个字符串并返回第一个成功的匹配
【三】宝藏谜底终于揭开
终于,他们历经千难万险终于找到了宝藏所在地。偌大的石碑上面只刻了单薄的几行字:
流者,众水聚也。
一起经历了许多许多的各派高手这时都恍然大悟了,所谓“主流语言”说的不就是我们每一个让编程更高效的语言吗?团结合作的精神才是真正的宝藏啊,只有我们每一个语言通力合作,在计算机的方方面面各司其职,才能让计算机世界更加和谐、高效和美满。
然后大家又不禁感叹:小正才应该是我们的榜样,一路走来默默无闻地帮助着我们,不管是linux、java、python、c、c++、Perl、PHP、Python、JavaScript和JScript等语言都可以使用,在Perl中还内建了一个功能强大的正则表达式引擎。
我们每一个语言都不能成为霸主,小正却是万能的工具。
终于,正则表达式成为了武林盟主,一统计算机天下。
哎呀!说了这么多不正经的,还是看看大家的洗洗脑吧:
1)正则表达式30分钟入门:http://deerchao.net/tutorials/regex/regex.htm
2)Python正则表达式指南:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
3)Python正则表达式的七个使用范例:http://blog.jobbole.com/74844/
4)能让你少写1000行代码的20个正则表达式:http://www.codeceo.com/article/20-regular-expressions.html
5)浅谈Python 正则表达式:https://zhuanlan.zhihu.com/p/26019553
6)正则表达式-菜鸟教程:http://www.runoob.com/regexp/regexp-tutorial.html
7)Python 正则表达式:https://mp.weixin.qq.com/s?__biz=MzIwMDU3MDkzNg==&mid=2651305404&idx=1&sn=047e69c48fb328b037a800effcd59c3c&chksm=8d0834ebba7fbdfd512abc61619113aa7c4d439ecbffa78b5314700a32aa7d000ef2c65b34c5&mpshare=1&scene=23&srcid=0127dE2vi9VzVsAxSbchVLZB#rd
8)正则表达式(转自维基百科):http://www.360doc.com/content/10/1105/18/928711_66914604.shtml
9)正则表达式(转自搜狗百科):http://baike.sogou.com/v107588.htm?ch=ww.xqy.xgbk