目录
目录...................................................................................................................................................2
引言...................................................................................................................................................3
什么是正则表达式?.......................................................................................................................3
准备工作...........................................................................................................................................3
匹配单个字符...................................................................................................................................3
1.匹配固定单个字符................................................................................................................3
2.匹配任意单个字符................................................................................................................4
3.匹配“.”元字符.....................................................................................................................5
4.匹配字符组...........................................................................................................................6
4.1 字符组的基本语法...................................................................................................6
4.2 在字符组中使用字符区间.......................................................................................7
4.3 反义字符组...............................................................................................................8
5.匹配特殊字符........................................................................................................................9
5.1 匹配元字符...............................................................................................................9
5.2 匹配空字符.............................................................................................................10
5.3 匹配特定字符类型.................................................................................................11
5.3.1 匹配数字类型...............................................................................................11
5.3.2 匹配字母、数字、下划线...........................................................................12
5.3.3 匹配空字符...................................................................................................12
匹配多个字符.................................................................................................................................12
1.匹配一个或多个.................................................................................................................13
2.匹配零个或多个字符.........................................................................................................14
3.匹配零个或一个字符串.....................................................................................................16
4.匹配指定数目字符.............................................................................................................16
4.1 匹配固定数目的字符.............................................................................................16
4.2 匹配区间以内数目的字符.....................................................................................17
5.贪婪匹配和惰性匹配.........................................................................................................18
5.1 贪婪匹配、惰性匹配概述.....................................................................................18
5.2 贪婪匹配的匹配过程:.........................................................................................19
5.3 惰性匹配的匹配过程.............................................................................................20
5.4 值得注意的两个匹配模式.....................................................................................20
匹配边界.........................................................................................................................................21
1.匹配单词边界.....................................................................................................................22
2.匹配非单词边界.................................................................................................................24
3.匹配文本边界.....................................................................................................................25
3.1 匹配文本首..............................................................................................................25
3.2 匹配文本末..............................................................................................................26
匹配 子模式...................................................................................................................................27
1.子模式..................................................................................................................................28
2.“或”匹配.........................................................................................................................28
3. 在子模式中使用“或”匹配............................................................................................29
4. 嵌套子模式.......................................................................................................................30
引言
正则表达式看上去并不像某种语言或者某个技术那么重要,仅靠它们你无法写出一个应用程
序来。然而,它们却总是在你的开发过程中如影随形,不管是进行表单验证,还是高亮显示搜索
结果,又或者是进行 URL 地址映射,总是需要使用它们。几乎所有的语言都对它进行了不同程度
的支持,由此,足见其在文本匹配这一领域中的地位。
正则表达式应该算是开发人员应该掌握的一个轻量级的技能,然而,它稀奇古怪地匹配模式
总让人们联想起外星语言。本文中,我期望能和大家一道,通过丰富地例子,由浅入深地对正则
表达式作一个复习和回顾。
NOTE:本文章节的编排顺序和风格主要参考 Ben Forta 的《Sams Teach Yourself Regular
Expressions in 10 Minutes》。
什么是正则表达式?
正则表达式也叫做匹配模式(Pattern),它由一组具有特定含义的字符串组成,通常用于匹
配和替换文本。
通常情况下,如果一个文本中出现了多个匹配,正则表达式返回第一个匹配,如果将 global
设置为 true,则会返回全部匹配;匹配模式是大小写敏感的,如果设置了 ignore case 为 true,
则将忽略大小写区别。
本文中,有时会将 正则表达式 简称为 表达式、匹配模式 或者 模式,它们可以互换。
本文默认 global 和 ignore case 均为 true。
准备工作
在开始进行之前,我们首先需要一份工具来对表达式进行测试,在本文中,使用的是
RegexTester 这个小程序,它的使用非常的简单明了,相信你随便摆弄下就会用了,这里就不对
其使用再做说明了。
可以点这里下载:
http://www.cnblogs.com/Files/JimmyZhang/RegexTester.zip
匹配单个字符
1.匹配固定单个字符
所有的 单个 大小写字母、数字,以及后面将要讲述的特殊字符,都是一个正则表达式,它
们只能匹配单个字符,且这个字符与它本身相同,例如,对于表达式“i”:
Text
Jimmy is a junior developer and jimmy lives in xi’an.
RegEx
i
Result
Jimmy is a junior developer and jimmy lives in xi’an.
需要注意:对于表达式“m”来说,它的匹配是 jimmy,请注意这里的匹配方式:并不是一
个“m”一次匹配了字符串“mm”,而是一个“m”分两次匹配了单个字符“m”,不管这两个“m”
是 紧挨着 或者 如同上面的“i”那样分散在句子的不同地方。
将多个固定单个字符进行组合就构成了一个匹配固定字符串的表达式。例如:“Jimmy”,它
也是一个正则表达式,它由多个匹配固定单个字符的表达式组成,它只可以匹配任何与它完全相
同的文本:
Text
Jimmy is a junior developer and jimmy lives in xi’an.
RegEx
Jimmy
Result
Jimmy is a junior developer and jimmy lives in xi’an.
你可以将“Jimmy”这个表达式的匹配过程理解成这样:它由“j”、“i”、“m”、“m”、“y”这
五固定的单个字符组成,对于每个单个字符来说,只能匹配与它完全相同的字符;而将这五个单
个字符组合起来的时候,它就匹配 字符排列顺序与表达式完全相同 并且 相应位置上的字符也
与对应字符相同 的字符串(实际上也就是与表达式完全相同的字符串)。
由于这种匹配方式的灵活度最小,只能匹配与它完全相同的字符,所以也叫“全字匹配”。
2.匹配任意单个字符
“.”可以匹配任意的 单个 字符、英文字母、数字,以及它本身。我们现在结合上面介绍
的全字匹配来学习它:
Text
regular.doc
regular1.exe
regular2.dat
expression.doc
express.dat
RegEx
regular.
Result
regular.doc
regular1.exe
regular2.dat
expression.doc
express.dat
可以看到,对于表达式“regular.”来说,前面“regular”部分是一个全字匹配,只能固
定的匹配“regular”字符串;后面的“.”部分,可以匹配任意单个字符(包含字符“.”本身)。
“.”可以连续使用,比如,我们可以写出“.e..”这样一个正则表达式。它将匹配所有:
前面有任意一个字符,紧跟着一个 e,随后又跟着任意两个字符的文本。
Text
regular.doc
regular1.exe
regular2.dat
expression.doc
express.dat
RegEx
.e..
Result
regular.doc
regular1.exe
regular2.dat
expression.doc
express.dat
NOTE:很多情况下,“.”不匹配换行。但在 RegexTester 这个工具中,它匹配换行,所以,
这里有个值得注意的匹配,就是 回车符+exp,我在上面的代码中用绿色粗体标识出了(回车符难
以标识)。
3.匹配“.”元字符
有的时候,我们不想让“.”去匹配任何的字符,仅仅想让它匹配“.”这一单个字符,也就
是仅匹配它本身,此时,可以使用“\.”来对它进行转义。