本书关注的是一种强大的工具——“正则表达式”。它将教会读者如何使用正则表达式解决各类问题,以及如何充分使用支持正则表达式的工具和语言。许多关于正则表达式的文档都没有介绍这种工具的能力,而本书的目的正是让读者“精通”正则表达式。许多种工具都支持正则表达式(文本编辑器、文字处理软件、系统工具、数据库引擎,等等),不过,要想充分挖掘正则表达式的能力,仍是应当将它做为编辑语言的一部分。例如Java、JScript、VisualBasic、VBScript、JavaScript、ECMAScript、C、C++、C#、elisp、Perl、Python、Tcl、Ruby、PHP、sed和awk。事实上,在一些用上述语言编写的程序中,正则表达式扮演了极其重要的角色。正则表达式可以获得众多语言和工具的支持是有缘由的:它们极其有用。从较低的层面上来讲,正则表达式描述的是一串文本(achunkoftext)的特征。读者能够用它来验证用户输入的数据,或者也能够用它来检索大量的文本。从较高的层面上来讲,正则表达式允许用户掌控他们本身的数据——控制这些数据,让他们为本身服务。掌握正则表达式,就是掌握本身的数据。
——来自本书序言正则表达式
本篇写的是正则表达式入门的内容,包括元字符及其相关术语,以及一些简单的语言差别。数据库
字符^是脱字符,能够锚定一行文本的开头;字符$是美圆符,能够锚定一行文本的结束.注意,这里匹配的都是位置,而不是字符或者内容。编辑器
字符组是指用方括号包围起来的字符,相似[...]。匹配的内容是是一个字符1。要注意的是,字符组内部也有元字符,且字符组外部的元字符在字符组内部无心义。工具
-是连字符,在字符组的两个字符中间能够表示一个范围,如[1-6]能够表示[123456]。在字符组中,若是要匹配连字符,最好放在最前面2。ip
^放在字符组开头,则成为一个排除型字符组,会匹配除了排除型字符组中全部字符的字符。文档
.(dot)能够匹配任意字符(除了.自身)。要注意的是,这个.可能被滥用,最好在使用前考虑清楚:检索的文本是否会对表达式形成干扰?是否都是固定格式?字符串
能够用|来表示或。这个元字符能够把多个子表达式组合起来,只要求匹配其中一个便可。这时,子表达式又称做“多选分支”(alternative)。入门
因为字符组只能匹配单个字符,而多选结构则能够匹配字符串,弥补了它的缺陷。table
在Python中,使用参数i打开。在英文中,常常出现这中须要。而忽略大小写就能够避免某些人因为打错字或者对单词的不熟悉致使的问题。class
在Python中,使用\b做为其分界符。
在egrep中,使用<\\>来作分界符。
分界符能够对单词的起始和结束位置进行检查,而不至于将一个单词从另外一个单词中分离。
?在一个字符或者分组后面,意为着其匹配的内容容许出现,可是不出现也没问题。
*、+和?的位置相同,其实是对其匹配内容出现的次数作一个限定。
+:要求匹配的内容出现一次及以上。
*:要求匹配的内容出现0次及以上3。
若是须要指定出现的次数,可使用{m,n},匹配内容m次到n次。
若是须要使用分组,或者对一个分组进行量词限定,就可使用它了。使用括号之后,能够:
在后面进行反向引用
做为一个子表达式使用
限制多选结构
对正则表达式的元字符进行转义,实际上就是加一个\实现。好比\(\)就是指一个括号,而不是一个分组。
元字符 | 名称 | 功能 |
---|---|---|
. | 点 | 匹配单个任意字符 |
[...] | 字符组 | 匹配单个字符组出现的字符 |
[^...] | 排除型字符组 | 匹配单个未在字符组出现的字符 |
\char | 转义符 | 若是char是元字符或没有特殊含义, 则匹配char。 |
? | 问号 | 允许非必须的一次匹配 |
+ | 加号 | 匹配1次以上 |
* | 星号 | 匹配任意次 |
{min,max} | 区间量词 | 匹配min次到max次。 |
^$ | 脱字符和美圆符 | 匹配一行文本的开头和结束。 |
\b | 边界符 | 匹配单词的边界 |
| | | | 多选结构 |
(...) | 括号 | 用处有三,请看上面 |
\1.\2 | 反向引用 | 对括号捕捉到的分组进行引用。 |