别被下面那些复杂的表达式吓倒,只要跟着我一步一步来,你会发现正则表达式其实并不
像你想像中的那么困难。当然,如果你看完了这篇教程之后发现自己明白了 很多,却又几
乎什么都记不得,那也是很正常的——其实我认为没接触过正则表达式的人在看完这篇教
程后能把提到过的语法记住 以上的可能性为零。这里只 是让你明白基本道理,以后你
还需要多练习,多查资料,才能熟练掌握正则表达式。
除了作为入门教程之外,本文还试图成为可以在日常工作中使用的正则表达式语法参考手
册(就作者本人的经历来说,这个目标还是完成得不错的)。
文本格式约定:专业术语 元字符语法格式 正则表达式 正则表达式中的一部分用于分析
用于在其中搜索的字符串 对正则表达式或其中一部分的说明
什么是正则表达式?
在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正
则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。
很可能你使用过 下用于文件查找的通配符,也就是和。如果你想
查找某个目录下的所有的 文档的话,你会搜索。在这里,会被解释成任意的字
符串。和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符它能
更精确地描述你的需求——当然,代价就是更复杂。比如你可以编写一个正则表达式来查
找所有以 开头,后面跟着 个数字,然后是一个连字号“,最后是 或 位数字的字符
串像 或 。
正则表达式是用于进行文本匹配的工具,所以本文里多次提到了在字符串里搜索 查找,这
种说法的意思是在给定的字符串中,寻找与给定的正则表达式相匹配的部分。有可能字符
串里有不止一个部分满足给定的正则表达式,这时每一个这样的部分被称为一个匹配。匹
配在本文里可能会有三种意思:一种是形容词性的,比如说一个字符串匹配一个表达式;
一种是动词性的,比如说在字符串里匹配正则表达式;还有一种是名词性的,就是刚刚说
到的“字符串中满足给定的正则表达式的一部分”。
入门
学习正则表达式的最好方法是从例子开始,理解例子之后再自己对例子进行修改,实验。
下面给出了不少简单的例子,并对它们作了详细的说明。
假设你在一篇英文小说里查找 ,你可以使用正则正则表达式 。
这是最简单的正则表达式了,它可以精确匹配这样的字符串:由两个字符组成,前一个字
符是 后一个是 。通常,处理正则表达式的工具会提供一个忽略大小写的选项,如果选中
了这个选项,它可以匹配 !" ! " 这四种情况中的任意一种。
不幸的是,很多单词里包含 这两个连续的字符,比如 # $% & 等等。用 来查找
的话,这里边的 也会被找出来。如果要精确地查找 这个单词的话,我们应该使用'('
(。
'( 是正则表达式规定的一个特殊代码(好吧,某些人叫它元字符,#)$$)),代表
着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格或标点符号或
换行来分隔的,但是'( 并不匹配这些单词分隔符中的任何一个,它只匹配一个位置。(如
果需要更精确的说法,'( 匹配这样的位置:它的前一个字符和后一个字符不全是')
假如你要找的是 后面不远处跟着一个 *+%,你应该用'('('(*+%'(。
这里,是另一个元字符,匹配除了换行符以外的任意字符。同样是元字符,不过它代表
的不是字符,也不是位置,而是数量它指定前边的内容可以重复任意次以使整个表达式
得到匹配。因此,连在一起就意味着任意数量的不包含换行的字符。现在'('('(*+%'