读懂正则表达式就这么简单
最近工作用到几次正则表达式(RegularExpression,简称regex),而且这是我的弱项,所以准备好好学习有关的知识,以备运用所学,解决实际问题。今天主要是介绍下接下来的日子都会写些什么内容以及今天会记录的知识点。知识点主要包含1.正则表达式入门;2.匹配单个字符;3.匹配一组字符;4.使用元字符;5.重复匹配;6.位置匹配;7.使用子表达式;8.回溯引用:前后一致匹配;9.前后查找;10.潜入条件;11.常见应用软件和编程语言中的正则表达式和12.常见问题的正则表达式解决方案。今天从第一章正则表达式入门开始,会从正则表达式的用途,如何使用正则表达式,什么是正则表达式以及使用正则表达式四个方面展开。
正则表达式是一种威力无比强大的武器,可以完成各种复杂的文本处理工作,被称为程序员的“瑞士军刀”。包含正则表达式中最常见最重要的知识,通过简明又实用的示例,从简单的文本匹配开始,循序渐进地介绍更高级的内通,包含回溯引用、前后查找、嵌入条件等。
1.1正则表达式的用途
正则表达式是一种工具,是人们为了解决某一类专门的问题而发明的,要想理解正则表达式及其功用,最好的办法是了解它们解决什么样的问题。请考虑以下几个场景:
(1)你正在搜索一个文件:这个文件里包含着单词car(不区分字母大小写),但你并不想把包含着字符串car的其他单词(比如scar、carry和incarcerate,等等)也找出来。
(2)你打算用一种应用服务器来动态地生成一个Web网页以显示从某个数据库里检索出来的文本。在那些文本里可能包含着一些URL地址字符串,而你希望那些URL地址在最终生成的页面里是可点击的(即生成些合法的HTML代码AHREF/A而不仅仅是普通的文本)。
(3)你创建了一份包含一张表单的Web页面,这张表单用来收集用户信息,其中包括一个电子邮件地址。你需要检查给出的电子邮件地址是否符合正确的语法格式。
(4)你正在编辑一段源代码并且要把所有的size都替换为assize,但这种替换仅限于单词size本身而不涉及那些包含着字符串size的其他单词。
以上场景都是大家在编写程序时经常会遇到的问题,用任何一种支持条件处理和字符串操作的编程语言都可以解决,但问题是解决方案会十分复杂。比较容易想到的办法是,用一些循环依次遍历单词或字符并在循环体中用一系列if语句来进行测试,这往往意味着你需要使用大量的标志来标记你已经找到了什么,还没有找到什么,还需要检查空白字符和特殊字符等等。而这一切都需要以手工方式来进行。另一种解决方案是使用正则表达式。上述问题都可以用一些精心构造的语句或者说一些由文本和特殊指令构成的高度简练的字符串来解决,比如这样的语句:\b[Cc][Aa][Fp]\b。
1.2如何使用正则表达式
如果认真思考一下那些问题场景,你就会发现它们不外乎两种情况:一种是查找特定的信息(搜索),另一种是查找并编辑特定的信息(替换)。事实上,从根本上来讲,正是正则表达式的两种基本用途:搜索和替换。要么匹配些文本(进行-次搜索),要么匹配并替换些文本(进行一次替换)。
1.2.1用正则表达式进行搜索
正则表达式的主要用途之一是搜索变化多端的文本,比如刚才描述的搜索单词car的场景:把car、CAR、Car,或CaR都找出来,但这只是整个问题比较简单的一部分(许多搜索工具都可以完成不区分字母大小写的搜索)。比较困难的部分是确保scar.carry和incarcerate之类的单词不会被匹配到。一些比较高级的编辑器提供了“MatchOnlyWholeWord(仪匹配整个单词)”选项,但还有许多编辑器并不具备这一功能,而你往往无法在你正在编辑的文档里做出这种调整。使用正则表达式而不是纯文本car进行搜索就可以解决这个问题。提示:想知道如何解决这个问题吗?你们其实已经见过答案了,就是我们刚才给出的示例语句:\b[Cc][Aa][Rr]\b。
1.2.2用正则表达式进行替换
正则表达式搜索的威力非常强大,非常有用,而且比较容易学习和掌握。不过,正则表达式的真正威力体现在替换操作方面,比如我们刚才所描述的需要把URL地址字符串替换为可点击URL地址的场景:这需要先把相关文本里的URL地址字符串找出来(通过搜索以
转载请注明:http://www.abuoumao.com/hyfw/1876.html