精通正则表达式(第3版)
精通正则表达式(第3版)
Jeffrey E. F. Friedl
余晟 译
出版时间:2007年07月
页数:542
本书讲解正则表达式,这种工具能够提高工作效率、让生活变得更轻松。精心调校后的正则表达式只需要十多秒就能完成以前数小时才能完成的枯燥任务。如今,正则表达式已经成为众多语言及工具——Perl、PHP、Java、Python、Ruby、MySQL、VB.NET和C#(以及.NET Framework中的任何语言)——中的标准特性,依靠它,你能以之前完全不敢设想的方式进行复杂而精巧的文本处理。
《精通正则表达式(第3版)》包含了对PHP及其正则表达式的讲解。这一版的更新也反映了其他语言的发展,深入讲解了Sun的java.util.regex,并特别提到了Java 1.4.2和Java 1.5/1.6之间的众多差异。
本书的内容:
● 各种语言和工具的功能比较
● 正则引擎的工作原理
● 优化(能节省大量的时间)
● 准确匹配期望的文本
● 针对具体语言的章节
《精通正则表达式(第3版)》,以明晰轻松的笔调向程序员深入浅出地讲解复杂的知识,并给出了现实世界中复杂问题的解决办法,读者能够立刻运用书中丰富的知识,巧妙而高效地解决各种问题。
“如果你的工作需要用到正则表达式(即便你已经有本很不错的关于开发语言的书),我还是要向你强烈推荐本书。”
——Dr.Chris Brown, Linux Format
“毫不夸张地说,《精通正则表达式(第3版)》是学习该工具的不二选择,也是每个程序员必备的杰作。”
——Jason Menard, Java Ranch
“所有关于正则表达式的书中,找不到比这更好的了。”
——Zak Greant, Planet PHP
  1. 前言 I
  2. 第1章:正则表达式入门 1
  3. 解决实际问题 2
  4. 作为编程语言的正则表达式 4
  5. 以文件名做类比 4
  6. 以语言做类比 5
  7. 正则表达式的思维框架 6
  8. 对于有部分经验的读者 6
  9. 检索文本文件:Egrep 6
  10. Egrep元字符 8
  11. 行的起始和结束 8
  12. 字符组 9
  13. 用点号匹配任意字符 11
  14. 多选结构 13
  15. 忽略大小写 14
  16. 单词分界符 15
  17. 小结 16
  18. 可选项元素 17
  19. 其他量词:重复出现 18
  20. 括号及反向引用 20
  21. 神奇的转义 22
  22. 基础知识拓展 23
  23. 语言的差异 23
  24. 正则表达式的目标 23
  25. 更多的例子 23
  26. 正则表达式术语汇总 27
  27. 改进现状 30
  28. 总结 32
  29. 一家之言 33
  30. 第2章:入门示例拓展 35
  31. 关于这些例子 36
  32. Perl简单入门 37
  33. 使用正则表达式匹配文本 38
  34. 向更实用的程序前进 40
  35. 成功匹配的副作用 40
  36. 错综复杂的正则表达式 43
  37. 暂停片刻 49
  38. 使用正则表达式修改文本 50
  39. 例子:公函生成程序 50
  40. 举例:修整股票价格 51
  41. 自动的编辑操作 53
  42. 处理邮件的小工具 53
  43. 用环视功能为数值添加逗号 59
  44. Text-to-HTML转换 67
  45. 回到单词重复问题 77
  46. 第3章:正则表达式的特性和流派概览 83
  47. 在正则的世界中漫步 85
  48. 正则表达式的起源 85
  49. 最初印象 91
  50. 正则表达式的注意事项和处理方式 93
  51. 集成式处理 94
  52. 程序式处理和面向对象式处理 95
  53. 查找和替换 98
  54. 其他语言中的查找和替换 100
  55. 注意事项和处理方式:小结 101
  56. 字符串,字符编码和匹配模式 101
  57. 作为正则表达式的字符串 101
  58. 字符编码 105
  59. Unicode 106
  60. 正则模式和匹配模式 110
  61. 常用的元字符和特性 113
  62. 字符表示法 115
  63. 字符组及相关结构 118
  64. 锚点及其他“零长度断言” 129
  65. 注释和模式修饰符 135
  66. 分组,捕获,条件判断和控制 137
  67. 高级话题引导 142
  68. 第4章:表达式的匹配原理 143
  69. 发动引擎 143
  70. 两类引擎 144
  71. 新的标准 144
  72. 正则引擎的分类 145
  73. 几句题外话 146
  74. 测试引擎的类型 146
  75. 匹配的基础 147
  76. 关于范例 147
  77. 规则1:优先选择最左端的匹配结果 148
  78. 引擎的构造 149
  79. 规则2:标准量词是匹配优先的 151
  80. 表达式主导与文本主导 153
  81. NFA引擎:表达式主导 153
  82. DFA引擎:文本主导 155
  83. 第一想法:比较NFA与DFA 156
  84. 回溯 157
  85. 真实世界中的例子:面包屑 158
  86. 回溯的两个要点 159
  87. 备用状态 159
  88. 回溯与匹配优先 162
  89. 关于匹配优先和回溯的更多内容 163
  90. 匹配优先的问题 164
  91. 多字符“引文” 165
  92. 使用忽略优先量词 166
  93. 匹配优先和忽略优先都期望获得匹配 167
  94. 匹配优先、忽略优先和回溯的要旨 168
  95. 占有优先量词和固化分组 169
  96. 占有优先量词,?+、*+、++和{m,n}+ 172
  97. 环视中的回溯 173
  98. 多选结构也是匹配优先的吗 174
  99. 发掘有序多选结构的价值 175
  100. NFA、DFA和POSIX 177
  101. 最左最长规则 177
  102. POSIX和最左最长规则 178
  103. 速度和效率 179
  104. 小结:NFA与DFA的比较 180
  105. 总结 183
  106. 第5章:正则表达式实用技巧 185
  107. 正则表达式的平衡法则 186
  108. 若干简单的例子 186
  109. 匹配连续行(续前) 186
  110. 匹配IP地址 187
  111. 处理文件名 190
  112. 匹配对称的括号 193
  113. 防备不期望的匹配 194
  114. 匹配分隔符之内的文本 196
  115. 了解数据,做出假设 198
  116. 去除文本首尾的空白字符 199
  117. HTML相关范例 200
  118. 匹配HTML Tag 200
  119. 匹配HTML Link 201
  120. 检查HTTP URL 203
  121. 验证主机名 203
  122. 在真实世界中提取URL 206
  123. 扩展的例子 208
  124. 保持数据的协调性 209
  125. 解析CSV文件 213
  126. 第6章:打造高效正则表达式 221
  127. 典型示例 222
  128. 稍加修改——先迈最好使的腿 223
  129. 效率vs准确性 223
  130. 继续前进——限制匹配优先的作用范围 225
  131. 实测 226
  132. 全面考察回溯 228
  133. POSIX NFA需要更多处理 229
  134. 无法匹配时必须进行的工作 230
  135. 看清楚一点 231
  136. 多选结构的代价很高 231
  137. 性能测试 232
  138. 理解测量对象 234
  139. PHP测试 234
  140. Java测试 235
  141. VB.NET测试 237
  142. Ruby测试 238
  143. Python测试 238
  144. Tcl测试 239
  145. 常见优化措施 240
  146. 有得必有失 240
  147. 优化各有不同 241
  148. 正则表达式的应用原理 241
  149. 应用之前的优化措施 242
  150. 通过传动装置进行优化 246
  151. 优化正则表达式本身 247
  152. 提高表达式速度的诀窍 252
  153. 常识性优化 254
  154. 将文字文本独立出来 255
  155. 将锚点独立出来 256
  156. 忽略优先还是匹配优先?具体情况具体分析 256
  157. 拆分正则表达式 257
  158. 模拟开头字符识别 258
  159. 使用固化分组和占有优先量词 259
  160. 主导引擎的匹配 260
  161. 消除循环 261
  162. 方法1:依据经验构建正则表达式 262
  163. 真正的“消除循环”解法 264
  164. 方法2:自顶向下的视角 266
  165. 方法3:匹配主机名 267
  166. 观察 268
  167. 使用固化分组和占有优先量词 268
  168. 简单的消除循环的例子 270
  169. 消除C语言注释匹配的循环 272
  170. 流畅运转的表达式 277
  171. 引导匹配的工具 277
  172. 引导良好的正则表达式速度很快 279
  173. 完工 281
  174. 总结:开动你的大脑 281
  175. 第7章:Perl 283
  176. 作为语言组件的正则表达式 285
  177. Perl的长处 286
  178. Perl的短处 286
  179. Perl的正则流派 286
  180. 正则运算符和正则文字 288
  181. 正则文字的解析方式 292
  182. 正则修饰符 292
  183. 正则表达式相关的Perl教义 293
  184. 表达式应用场合 294
  185. 动态作用域及正则匹配效应 295
  186. 匹配修改的特殊变量 299
  187. qr/…/运算符与regex对象 303
  188. 构建和使用regex对象 303
  189. 探究regex对象 305
  190. 用regex对象提高效率 306
  191. Match运算符 306
  192. Match的正则运算元 307
  193. 指定目标运算元 308
  194. Match运算符的不同用途 309
  195. 迭代匹配:Scalar Context,使用/g 312
  196. Match运算符与环境的关系 316
  197. Substitution运算符 318
  198. 运算元replacement 319
  199. /e修饰符 319
  200. 应用场合与返回值 321
  201. Split运算符 321
  202. Split基础知识 322
  203. 返回空元素 324
  204. Split中的特殊Regex运算元 325
  205. Split中带捕获型括号的match运算元 326
  206. 巧用Perl的专有特性 326
  207. 用动态正则表达式结构匹配嵌套结构 328
  208. 使用内嵌代码结构 331
  209. 在内嵌代码结构中使用local函数 335
  210. 关于内嵌代码和my变量的忠告 338
  211. 使用内嵌代码匹配嵌套结构 340
  212. 正则文字重载 341
  213. 正则文字重载的问题 344
  214. 模拟命名捕获 344
  215. 效率 347
  216. 办法不只一种 348
  217. 表达式编译、/o修饰符、qr/???/和效率 348
  218. 理解“原文”副本 355
  219. Study函数 359
  220. 性能测试 360
  221. 正则表达式调试信息 361
  222. 结语 363
  223. 第8章:Java 365
  224. Java的正则流派 366
  225. Java对\p{…}和\P{…}的支持 369
  226. Unicode行终结符 370
  227. 使用java.util.regex 371
  228. The Pattern.compile() Factory 372
  229. Pattern的matcher方法 373
  230. Matcher对象 373
  231. 应用正则表达式 375
  232. 查询匹配结果 376
  233. 简单查找-替换 378
  234. 高级查找-替换 380
  235. 原地查找-替换 382
  236. Matcher的检索范围 384
  237. 方法链 389
  238. 构建扫描程序 389
  239. Matcher的其他方法 392
  240. Pattern的其他方法 394
  241. Pattern的split方法,单个参数 395
  242. Pattern的split方法,两个参数 396
  243. 拓展示例 397
  244. 为Image Tag添加宽度和高度属性 397
  245. 对于每个Matcher,使用多个Pattern校验HTML 399
  246. 解析CSV文档 401
  247. Java版本差异 401
  248. 1.4.2和1.5.0之间的差异 402
  249. 1.5.0和1.6之间的差异 403
  250. 第9章:.NET 405
  251. .NET的正则流派 406
  252. 对于流派的补充 409
  253. 使用.NET正则表达式 413
  254. 正则表达式快速入门 413
  255. 包概览 415
  256. 核心对象概览 416
  257. 核心对象详解 418
  258. 创建Regex对象 419
  259. 使用Regex对象 421
  260. 使用Match对象 427
  261. 使用Group对象 430
  262. 静态“便捷”函数 431
  263. 正则表达式缓存 432
  264. 支持函数 432
  265. .NET高级话题 434
  266. 正则表达式装配件 434
  267. 匹配嵌套结构 436
  268. Capture对象 437
  269. 第10章:PHP 439
  270. PHP的正则流派 441
  271. Preg函数接口 443
  272. “Pattern”参数 444
  273. Preg函数罗列 449
  274. preg_match 449
  275. preg_match_all 453
  276. preg_replace 458
  277. preg_replace_callback 463
  278. preg_split 465
  279. preg_grep 469
  280. preg_quote 470
  281. “缺失”的preg函数 471
  282. preg_regex_to_pattern 472
  283. 对未知的Pattern参数进行语法检查 474
  284. 对未知正则表达式进行语法检查 475
  285. 递归的正则表达式 475
  286. 匹配嵌套括号内的文本 475
  287. 不能回溯到递归调用之内 477
  288. 匹配一组嵌套的括号 478
  289. 效率 478
  290. 模式修饰符S:“研究” 478
  291. 扩展示例 480
  292. 用PHP解析CSV 480
  293. 检查tagged data的嵌套正确性 481
  294. 索引 485
书名:精通正则表达式(第3版)
译者:余晟 译
国内出版社:中国电力出版社
出版时间:2007年07月
页数:542
书号:978-7-121-04684-1
原版书出版商:O'Reilly Media
Jeffrey E. F. Friedl
 
effrey E.F.Friedl生长于俄亥俄州Rootstown的乡村,小时候希望成为天文学家,直到有一天他发现了闲置在化学实验室角落里的TRS-80 Model I(装备了整整16KB RAM)。1980年他终于开始使用Unix(和正则表达式)。在肯特(Kent)大学和新罕布什尔(New Hampshire)大学分别获得计算机学士和硕士学位之后,他在日本京都工作了8年,为欧姆龙公司(Omron Corporation)进行核心开发,1997年迁居硅谷,在当时还不为人知的Yahoo!用正则表达式处理财经新闻和数据。2004年4月他偕妻儿返回京都。
Friedl的闲暇时间很充裕,这时候他喜欢与妻子Fumie和3岁大的,总是蹦蹦跳跳的儿子Anthony一起。他还喜欢拍摄遍布京都的美景,照片贴在他的blog上:http://regex.info/blog。
Jeffrey E. F. Friedl was raised in the countryside of Rootstown, Ohio, and had aspi-rations of being an astronomer until one day noticing a TRS-80 Model I sitting unused in the corner of the chem lab (bristling with a full 16K of RAM, no less).
He eventually began using Unix (and regular expressions) in 1980, and earned degrees in Computer Science from Kent (BS) and the University of New Hamp-shire (MS). He did kernel development for Omron Corporation in Kyoto, Japan for eight years before moving in 1997 to Silicon Valley to apply his regular-expression know-how to financial news and data for a little-known company called Yahoo!
 
 
《精通正则表达式(第3版)》的封面动物是猫头鹰(owls)。这些捕猎者包括两科(family),约180种,分布于世界各地,当然南极洲除外。多数种类都在夜间出动,捕食活物,小到昆虫,大到野兔。
猫头鹰的眼睛很大,直视前方,因为不易转动,猫头鹰必须转动头部才能观察四周。它们的头部最多可以旋转270度,有些种类的猫头鹰甚至能转到头顶向下。作为捕猎者,猫头鹰在进化过程中锻炼出极强的辨识声音频率和方向的能力。许多种类的猫头鹰的耳朵是不对称的,这样在微光或暗夜时更容易定位猎物。一旦确定了方位,它们可以依靠柔软的羽毛,出其不意,悄无声息地接近猎物。
长期以来人们将猫头鹰视为邪恶而冷血的生物,其实它们完全不是如此。或许是因为大眼睛让人觉得狡黠,民间传说中一直有它们的故事。
封面的图像来自Dover Pictorial Archive的19世纪雕版画。