第1章 正则表达式概述 1
1.1 什么是正则表达式 2
1.2 可以使用正则表达式做什么 4
1.2.1 查找重复的单词 4
1.2.2 检查Web表单的输入 5
1.2.3 转换日期格式 5
1.2.4 发现错误的拼写 5
1.2.5 为URL添加链接 6
1.3 使用过的正则表达式 6
1.3.1 在文字处理软件中查找和替换 6
1.3.2 目录列表 7
1.3.3 在线搜索 7
1.4 为什么正则表达式看起来令人生畏 7
1.4.1 简洁而神秘的语法 8
1.4.2 空格会导致含义改变 8
1.4.3 没有统一的语法标准 11
1.4.4 各种实现之间的差别 11
1.4.5 不同环境下的字符含义不同 11
1.4.6 正则表达式可以区分大小写 13
1.4.7 支持性技术的不断发展 14
1.4.8 一个问题对应多个解决方案 14
1.4.9 使用正则表达式做什么 15
1.5 支持正则表达式的语言 15
1.6 替换大量文本 15
第2章 正则表达式工具和使用方法 18
2.1 正则表达式工具 18
2.1.1 findstr 19
2.1.2 Microsoft Word 20
2.1.3 StarOffice Writer/OpenOffice.org Writer 23
2.1.4 Komodo Rx Package 23
2.1.5 PowerGrep 24
2.1.6 Microsoft Excel 24
2.2 基于语言和平台的工具 25
2.2.1 JavaScript和JScript 25
2.2.2 VBScript 25
2.2.3 Visual Basic.NET 25
2.2.4 C# 25
2.2.5 PHP 25
2.2.6 Java 26
2.2.7 Perl 26
2.2.8 MySQL 26
2.2.9 SQL Server2000 26
2.2.10 W3C XMLS chema 26
2.3 使用正则表达式的分析方法 27
2.3.1 用自然语言来表达和说明你的意图 27
2.3.2 数据源及其可能的内容 28
2.3.3 可用的正则表达式选项 29
2.3.4 灵敏度和特殊性 29
2.3.5 创建适当的正则表达式 30
2.3.6 对除简单正则表达式之外的正则表达式给予说明 30
2.3.7 测试正则表达式的结果 32
第3章 简单的正则表达式 34
3.1 匹配单个字符 34
3.1.1 匹配连续的字符序列 38
3.1.2 元字符简介 40
3.1.3 匹配不同的字符序列 45
3.2 匹配可选字符 46
3.3 其他限量操作符 52
3.3.1 *限定符 52
3.3.2 +限定符 54
3.4 大括号语法 56
3.4.1 {n}语法 56
3.4.2 {n,m}语法 56
3.4.3 {O,m} 56
3.4.4 {n,m} 58
3.4.5 {n,} 59
3.5 练习 60
第4章 元字符和修饰符 61
4.1 正则表达式的元字符 61
4.1.1 考虑字符和位置 62
4.1.2 句点(.)元字符 63
4.1.3 \w元字符 68
4.1.4 \W元字符 69
4.1.5 数字和非数字 70
4.2 空白和非空白元字符 78
4.2.1 \s元字符 78
4.2.2 处理可选的空白符 80
4.2.3 \S元字符 82
4.2.4 \t元字符 82
4.2.5 \n元字符 84
4.2.6 转义字符 86
4.2.7 查找反斜杠 86
4.3 修饰符 87
4.3.1 全局搜索 87
4.3.2 不区分大小写的搜索 87
4.4 练习 88
第5章 字符类 89
5.1 字符类概述 89
5.1.1 在两个字符中选择 91
5.1.2 对字符类应用限定符 94
5.2 在字符类中使用范围 97
5.2.1 字母字符范围 98
5.2.2 反转字符类的范围 109
5.2.3 潜在的范围陷阱 110
5.2.4 查找HTML中的标题元素 113
5.3 字符类中元字符的含义 114
5.3.1 ^元字符 114
5.3.2 如何使用-元字符 116
5.4 对字符类取反 116
5.5 POSIX字符类 119
5.6 练习 121
第6章 字符串、行和词边界 122
6.1 字符串、行和词边界 122
6.1.1 ^元字符 123
6.1.2 ^元字符和多行模式 125
6.1.3 $元字符 127
6.2 什么是词 139
6.3 识别词边界 140
6.3.1 \<语法 140
6.3.2 \>语法 141
6.3.3 \b语法 143
6.3.4 不常见的词边界元字符 144
6.4 练习 144
第7章 正则表达式中的圆括号 145
7.1 使用圆括号分组 145
7.1.1 圆括号和限定符 147
7.1.2 匹配圆括号直接量 148
7.1.3 美国电话号码的例子 148
7.2 交替选择 150
7.2.1 在多个选项中做出选择 152
7.2.2 错误匹配的交替行为 155
7.3 捕获圆括号 157
7.3.1 捕获组的编号 157
7.3.2 使用嵌套的圆括号时的编号 158
7.3.3 命名的组 159
7.4 非捕获的圆括号 160
7.5 反向引用 161
7.6 练习 164
第8章 向前查找和向后查找 165
8.1 为什么需要向前查找和向后查找 165
8.2 向前查找 166
8.2.1 肯定式向前查找 168
8.2.2 否定式向前查找 171
8.3 肯定式向前查找的例子 172
8.3.1 在同一文档中使用肯定式向前查找 172
8.3.2 插入单引号 173
8.4 向后查找 177
8.4.1 肯定式向后查找 177
8.4.2 否定式向后查找 181
8.5 如何匹配位置 182
8.6 练习 186
第9章 正则表达式的灵敏度和特殊性 187
9.1 什么是灵敏度和特殊性 187
9.1.1 极端的灵敏度和糟糕的特殊性 188
9.1.2 电子邮件地址的例子 189
9.1.3 替换连字符的例子 193
9.2 灵敏度和特殊性的平衡 195
9.3 元字符如何影响灵敏度和特殊性 195
9.3.1 灵敏度、特殊性和位置字符 196
9.3.2 灵敏度、特殊性和模式 196
9.3.3 灵敏度、特殊性和向前、向后查找 197
9.3.4 正则表达式应该做多少 197
9.4 了解数据、灵敏度和特殊性 198
9.4.1 缩写词 198
9.4.2 来自其他语言的字符 199
9.4.3 名字 199
9.4.4 灵敏度及如何最大化 200
9.4.5 特殊性及如何最大化 200
9.5 重新分析Star Training Company的例子 200
9.6 练习 204
第10章 说明和调试正则表达式 205
10.1 说明正则表达式 205
10.1.1 说明问题定义 206
10.1.2 为代码添加注释 206
10.1.3 利用扩展模式 207
10.2 了解你的数据 209
10.2.1 缩写词 209
10.2.2 固有名字 209
10.2.3 错误的拼写 210
10.3 创建测试用例 210
10.4 调试正则表达式 211
10.4.1 叛逆的空白符 211
10.4.2 反斜杠导致的问题 213
10.4.3 考虑其他原因 213
第11章 在Microsoft Word中使用正则表达式 215
11.1 用户界面 215
11.2 可用的元字符 217
11.2.1 限定符 218
11.2.2 模式 223
11.2.3 字符类 226
11.2.4 反向引用 226
11.2.5 向前查找和向后查找 226
11.2.6 贪婪匹配与懒惰匹配 226
11.3 例子 228
11.3.1 字符类的例子(包括范围) 228
11.3.2 全字匹配 229
11.4 搜索和替换的例子 230
11.4.1 使用反向引用改变名字的结构 230
11.4.2 操纵日期 233
11.4.3 Star Training Company的例子 235
11.5 VBA中的正则表达式 238
11.6 练习 240
第12章 在StarOffice/OpenOffice.org Writer中使用正则表达式 241
12.1 用户界面 241
12.2 可用的元字符 243
12.2.1 限定符 244
12.2.2 模式 245
12.2.3 字符类 245
12.2.4 交替选择 248
12.2.5 反向引用 251
12.2.6 向前查找和向后查找 252
12.3 搜索的例子 253
12.4 搜索和替换的例子 255
12.5 POSIX字符类 258
12.6 练习 261
第13章 通过findstr使用正则表达式 262
13.1 findstr简介 262
13.2 findstr支持的元字符 264
13.2.1 限定符 266
13.2.2 字符类 267
13.3 词边界位置 269
13.4 行开始位置和结束位置 271
13.4.1 命令行开关的例子 272
13.4.2 /v开关 272
13.4.3 /a开关 274
13.5 单个文件的例子 275
13.5.1 简单字符类的例子 276
13.5.2 查找协议的例子 276
13.6 多个文件的例子 277
13.7 文件列表的例子 278
13.8 练习 279
第14章 PowerGREP 280
14.1 PowerGREP的界面 280
14.1.1 简单查找的例子 281
14.1.2 Replace选项卡 283
14.1.3 File Finder选项卡 284
14.1.4 语法着色 285
14.1.5 其他选项卡 285
14.2 PowerGREP支持的元字符 285
14.2.1 数字和字母字符 286
14.2.2 限定符 287
14.2.3 反向引用 289
14.2.4 交替选择 292
14.2.5 行位置元字符 292
14.2.6 词边界元字符 293
14.2.7 向前查找和向后查找 295
14.3 复杂一点的例子 296
14.3.1 查找HTML中的水平线(<hr>)元素 296
14.3.2 匹配时间的例子 298
14.4 练习 302
第15章 Microsoft Excel中的通配符 303
15.1 Excel的查找界面 303
15.2 Excel支持的通配符 306
15.3 在记录单中使用通配符 310
15.4 在筛选中使用通配符 312
15.5 练习 314
第16章 SQL Server 2000中的正则表达式功能 315
16.1 支持的元字符 315
16.2 在LIKE中使用正则表达式 316
16.2.1 %元字符 316
16.2.2 元字符 321
16.2.3 字符类 322
16.3 对字符类取反 324
16.4 使用全文搜索 327
16.5 图像字段中的筛选器 337
16.6 练习 337
第17章 在MySQL中使用正则表达式 338
17.1 MySQL简介 338
17.2 MySQL支持的元字符 341
17.2.1 使用_和%元字符 342
17.2.2 直接量测试匹配:_和%元字符 344
17.3 使用REGEXP关键字和元字符 345
17.3.1 使用位置元字符 348
17.3.2 使用字符类 350
17.3.3 限定符 352
17.4 社会保险号的例子 354
17.5 练习 355
第18章 正则表达式与Microsoft Access 356
18.1 Microsoft Access中元字符的用法 356
18.1.1 创建一个硬编码的查询. 357
18.1.2 创建一个参数查询 361
18.2 Access支持的元字符 363
18.2.1 使用?元字符 363
18.2.2 使用*元字符 364
18.3 使用#元字符 365
18.4 使用#字符匹配日期/时间数据 366
18.5 在Access中使用字符类 367
18.6 练习 369
第19章 JScript和JavaScript中的正则表达式 370
19.1 在JavaScript和JScript中使用正则表达式 371
19.1.1 RegExp对象 373
19.1.2 String对象 387
19.2 JavaScript和JScript中的元字符 390
19.3 说明JavaScript正则表达式 391
19.4 验证SSN的例子 391
19.5 练习 393
第20章 正则表达式与VBScript 394
20.1 RegExp对象及其用法 394
20.1.1 RegExp对象的Pattern属性 395
20.1.2 RegExp对象的Global属性 397
20.1.3 RegExp对象的IgnoreCase属性 400
20.1.4 RegExp对象的Test()方法 403
20.1.5 RegExp对象的Replace()方法 403
20.1.6 RegExp对象的Execute()方法 405
20.2 使用Match对象和Matches集合 409
20.3 VBScript支持的元字符 411
20.3.1 限定符 412
20.3.2 位置元字符 412
20.3.3 字符类 416
20.3.4 词边界 416
20.3.5 向前查找 416
20.3.6 分组和非分组(捕获)的圆括号 419
20.4 练习 420
第21章 Visual Basic.NET与正则表达式 421
21.1 System.Text.RegularExpressions命名空间 421
21.1.1 一个简单的VisualBasic.NET的例子 421
21.1.2 System.Text.RegularExpressions中的类 425
21.1.3 Regex对象 426
21.1.4 GroupCollection和Group类 432
21.1.5 CaptureCollection和Capture类 434
21.1.6 RegexOptions枚举 436
21.1.7 使用IgnorePattem Whitespace选项添加嵌入式说明 439
21.2 Visual Basic.NET支持的元字符 442
21.3 练习 445
第22章 C#和正则表达式 446
22.1 System.Text.RegularExpressions命名空间中的类 446
22.1.1 介绍性的例子 446
22.1.2 System.Text.Regular Expressions的类 451
23.1.3 Regex类 451
22.1.4 使用Regex类的静态方法 464
22.1.5 Match和Matches类 465
22.1.6 GroupCollection类和Group类 468
22.1.7 RegexOptions类 470
22.1.8 IgnorePattern Whitespace选项 471
22.2 VisualC#.NET支持的元字符 473
22.2.1 使用命名的组 475
22.2.2 使用反向引用 477
22.3 练习 478
第23章 PHP和正则表达式 479
23.1 PHP5.0入门 479
23.2 PHP组件如何支持正则表达式 483
23.2.1 ereg()函数集 483
23.2.2 eregi()函数 488
23.2.3 Perl兼容正则表达式 496
23.3 PHP支持的元字符 509
23.3.1 ereg()函数族支持的元字符 509
23.3.2 在PHP中使用POSIX字符类 510
23.3.3 PCRE支持的元字符 512
23.3.4 位置元字符 513
23.3.5 PHP中的字符类 513
23.3.6 为PHP中的正则表达式添加说明 515
23.4 练习 517
第24章 W3C XML Schema中的正则表达式 518
24.1 W3C XML Schema基础 518
24.1.1 使用W3C XML Schema的工具 519
24.1.2 XML Schema和DTD的比较 519
24.1.3 W3C XML Schema如何表示约束 524
24.1.4 W3C XML Schema中的数据类型 524
24.1.5 通过限制派生 527
24.1.6 Unicode与W3C XML Schema 529
24.1.7 Unicode概述 529
24.1.8 使用Unicode字符类 530
24.1.9 Unicode字符块 534
24.1.10 W3C XML Schema支持的元字符 537
24.1.11 位置元字符 538
24.1.12 匹配数字 539
24.1.13 交替选择 539
24.1.14 使用\w和\s元字符 540
24.1.15 转义元字符 540
24.2 练习 541
第25章 Java中的正则表达式 543
25.1 java.util.regex包简介 543
25.1.1 获取并安装Java 544
25.1.2 Pattern类 544
25.1.3 使用静态方法matches() 544
25.1.4 两个简单的Java例子 545
25.1.5 Pattern类的方法 555
25.1.6 Matcher类 557
25.1.7 PattemSyntax Exception类 566
25.2 java.util.regex包中支持的元字符 567
25.2.1 使用\d元字符 567
25.2.2 字符类 569
25.2.3 java.util.regex包中的POSIX字符类 573
25.2.4 Unicode字符类和字符块 574
25.2.5 使用转义字符 574
25.3 使用String类的方法 575
25.3.1 使用matches()方法 575
25.3.2 使用replaceFirst()方法 577
25.3.3 使用replaceAll()方法 578
25.3.4 使用split()方法 578
25.4 练习 579
第26章 Perl中的正则表达式 580
26.1 下载并安装Perl 580
26.2 使用Perl正则表达式的基本条件 586
26.3 使用Perl正则表达式操作符 587
26.3.1 使用m//操作符 587
26.3.2 使用其他正则表达式定界符 594
26.3.3 使用置入变量匹配 595
26.3.4 使用s///操作符 597
26.3.5 使用带全局修饰符的s 598
26.3.6 使用s///与默认变量 600
26.3.7 使用split操作符 601
26.4 Perl支持的元字符 602
26.4.1 在Perl中使用限定符 603
26.4.2 使用位置元字符 604
26.4.3 Perl中的捕获组 605
26.4.4 在Perl中使用反向引用 607
26.4.5 使用交替选择 608
26.4.6 在Perl中使用字符类 609
26.4.7 使用向前查找 613
26.4.8 使用向后查找 615
26.5 在Perl中使用正则表达式匹配模式 616
26.6 一个简单的PerlRegex测试程序 619
26.7 练习 622
附录 练习答案 623