正则表达式必知必会(修订版)
上QQ阅读APP看书,第一时间看更新

1.1 正则表达式的用途

和其他工具一样,正则表达式是人们为了解决特定的问题而发明的一种工具。要想理解正则表达式及其功用,最好的办法是了解它可以解决什么样的问题。

请考虑以下几个场景。

你正在搜索一个文件,这个文件里包含单词car(不区分字母大小写),但你并不想把包含字符串car的其他单词(比如scarcarryincarcerate等)也找出来。

你打算生成一个网页以显示从某个数据库里检索出来的文本。在那些文本里可能包含一些URL地址字符串,而你希望那些URL地址在最终生成的页面里是可点击的(也就是说,你打算生成一些合法的HTML代码——<a href></a>——而不仅仅是普通的文本)。

你创建了一个包含一张表单的应用程序,这个应用程序负责收集包括电子邮件地址在内的用户信息。你需要检查用户给出的电子邮件地址是否符合正确的语法格式。

你正在编辑一段源代码并且要把所有的size都替换为isize,但这种替换仅限于单词size本身,并不涉及那些包含字符串size的其他单词。

你正在显示一份计算机文件系统中所有文件的清单,但你只想把文件名里包含Application字样的文件列举出来。

你正在把一些数据导入应用程序。那些数据以制表符作为分隔符,但你的应用程序要支持CSV格式(每条记录独占一行,同一条记录里的各项数据之间用逗号分隔,数据允许出现在引号内)。

你需要在文件里搜索某个特定的文本,但你只想把出现在特定位置(比如每行的开头或是每条语句的结尾)的文本找出来。

以上场景是大家在编写程序时经常会遇到的问题,用任何一种支持条件处理和字符串操作的编程语言都可以解决,但问题是这种解决方案会变得十分复杂。比较容易想到的办法是,用一些循环来依次遍历那些单词或字符并在循环体里面用一系列if语句来进行测试,这往往意味着你需要使用大量的标志来记录已经找到了什么、还没有找到什么,另外少不了要检查空白字符和特殊字符,等等。而这一切都需要一遍又一遍地以手工方式进行。

另一种解决方案是使用正则表达式。上述问题都可以用一些精心构造的语句,或者说一些由文本和特殊指令构成的高度简练的字符串来解决,比如像下面这样的语句:

\b[Cc][Aa][Rr]\b

注意 如果现在还看不懂这一行,先别着急,你很快就会知道它的含义是什么。