第1章 什么是正则表达式

正则表达式是一种特殊的字符串模式,用于匹配一组字符串。它最早出现于20世纪40年代,当时用来描述正则语言,而到20世纪70年代才真正出现在程序设计领域。据我所知,正则表达式首次出现在Ken Thompson编写的QED文本编辑器中。

“正则表达式是描述一组字符串特征的模式,用来匹配特定的字符串。”——Ken Thompson

正则表达式后来成为ed、sed 和 vi(vim) 编辑器、 grep、AWK等Unix操作系统衍生出的工具集中重要的组成部分。但这些工具实现正则表达式的方式并不完全一致。

本书使用归纳方式讲述,也就是说,会从特例讲起,最终归结到一般情况。所以我们不会先陈述观点,然后举例,而是先为大家展示示例,然后归纳出一般性结论。本书的风格是“实践出真知”。

正则表达式素以“坑多”而闻名,但是这跟你的学习方法有关。大家通常会从下面这个简单的正则表达式开始学习:

\d 

——这是匹配0到9范围内的任意数字的字符组简写式——然后过渡到更为复杂的内容,比如:

^((\d{3})|^\d{3}[.-]?)?\d{3}[.-]?\d{4}$ 

这是本章最后才会讲到的一个还算比较健壮的正则表达式,它可以匹配10位的北美电话号码。无论区号是否加括号(如果加,则左、右括号必须成对出现),数字间是否有点号(句点)或连字符,它都可以匹配。

第10章会展示一个更复杂的匹配电话号码的正则表达式,但本章你只要学会上面这个就行了。

现在还不理解也没关系,本章会将整个表达式的内容分拆开一点一点地教给你。只要你跟着这里的示例做(当然包括本书其他示例),编写正则表达式很快就可以习惯成自然。你准备好了吗?

我有时会将本书中的Unicode字符用它们的代码点(4位的十六进制数)来表示。这些代码点以U+0000的形式出现。比如,U+002E表示点号的代码点。

目录