好书推荐 好书速递 排行榜 读书文摘

精通正则表达式

精通正则表达式
作者:[美] Jeffrey E.F.Friedl
译者:余晟
副标题:第3版
出版社:电子工业出版社
出版年:2012-07
ISBN:9787121175015
行业:其它
浏览数:73

内容简介

《精通正则表达式(第3版)》内容简介:随着互联网的迅速发展,几乎所有工具软件和程序语言都支持的正则表达式也变得越来越强大和易于使用。《精通正则表达式(第3版)》是讲解正则表达式的经典之作。《精通正则表达式(第3版)》主要讲解了正则表达式的特性和流派、匹配原理、优化原则、实用诀窍以及调校措施,并详细介绍了正则表达式在Perl、Java、.NET、PHP中的用法。《精通正则表达式(第3版)》自第1版开始着力于教会读者“以正则表达式来思考”,来让读者真正“精通”正则表达式。该版对PHP的相关内容、Javal.5和Javal.6的新特性作了可观的扩充讲解。任何有机会仲用正则表达式的读者都会从中获益匪浅。

......(更多)

作者简介

......(更多)

目录

前言 I

第1章:正则表达式入门 1

解决实际问题 2

作为编程语言的正则表达式 4

以文件名做类比 4

以语言做类比 5

正则表达式的思维框架 6

对于有部分经验的读者 6

检索文本文件:Egrep 6

Egrep元字符 8

行的起始和结束 8

字符组 9

用点号匹配任意字符 11

多选结构 13

忽略大小写 14

单词分界符 15

小结 16

可选项元素 17

其他量词:重复出现 18

括号及反向引用 20

神奇的转义 22

基础知识拓展 23

语言的差异 23

正则表达式的目标 23

更多的例子 23

正则表达式术语汇总 27

改进现状 30

总结 32

一家之言 33

第2章:入门示例拓展 35

关于这些例子 36

Perl简单入门 37

使用正则表达式匹配文本 38

向更实用的程序前进 40

成功匹配的副作用 40

错综复杂的正则表达式 43

暂停片刻 49

使用正则表达式修改文本 50

例子:公函生成程序 50

举例:修整股票价格 51

自动的编辑操作 53

处理邮件的小工具 53

用环视功能为数值添加逗号 59

Text-to-HTML转换 67

回到单词重复问题 77

第3章:正则表达式的特性和流派概览 83

在正则的世界中漫步 85

正则表达式的起源 85

最初印象 91

正则表达式的注意事项和处理方式 93

集成式处理 94

程序式处理和面向对象式处理 95

查找和替换 98

其他语言中的查找和替换 100

注意事项和处理方式:小结 101

字符串,字符编码和匹配模式 101

作为正则表达式的字符串 101

字符编码 105

Unicode 106

正则模式和匹配模式 110

常用的元字符和特性 113

字符表示法 115

字符组及相关结构 118

锚点及其他“零长度断言” 129

注释和模式修饰符 135

分组,捕获,条件判断和控制 137

高级话题引导 142

第4章:表达式的匹配原理 143

发动引擎 143

两类引擎 144

新的标准 144

正则引擎的分类 145

几句题外话 146

测试引擎的类型 146

匹配的基础 147

关于范例 147

规则1:优先选择最左端的匹配结果 148

引擎的构造 149

规则2:标准量词是匹配优先的 151

表达式主导与文本主导 153

NFA引擎:表达式主导 153

DFA引擎:文本主导 155

第一想法:比较NFA与DFA 156

回溯 157

真实世界中的例子:面包屑 158

回溯的两个要点 159

备用状态 159

回溯与匹配优先 162

关于匹配优先和回溯的更多内容 163

匹配优先的问题 164

多字符“引文” 165

使用忽略优先量词 166

匹配优先和忽略优先都期望获得匹配 167

匹配优先、忽略优先和回溯的要旨 168

占有优先量词和固化分组 169

占有优先量词,?+、*+、++和{m,n}+ 172

环视中的回溯 173

多选结构也是匹配优先的吗 174

发掘有序多选结构的价值 175

NFA、DFA和POSIX 177

最左最长规则 177

POSIX和最左最长规则 178

速度和效率 179

小结:NFA与DFA的比较 180

总结 183

第5章:正则表达式实用技巧 185

正则表达式的平衡法则 186

若干简单的例子 186

匹配连续行(续前) 186

匹配IP地址 187

处理文件名 190

匹配对称的括号 193

防备不期望的匹配 194

匹配分隔符之内的文本 196

了解数据,做出假设 198

去除文本首尾的空白字符 199

HTML相关范例 200

匹配HTML Tag 200

匹配HTML Link 201

检查HTTP URL 203

验证主机名 203

在真实世界中提取URL 206

扩展的例子 208

保持数据的协调性 209

解析CSV文件 213

第6章:打造高效正则表达式 221

典型示例 222

稍加修改——先迈最好使的腿 223

效率vs准确性 223

继续前进——限制匹配优先的作用范围 225

实测 226

全面考察回溯 228

POSIX NFA需要更多处理 229

无法匹配时必须进行的工作 230

看清楚一点 231

多选结构的代价很高 231

性能测试 232

理解测量对象 234

PHP测试 234

Java测试 235

VB.NET测试 237

Ruby测试 238

Python测试 238

Tcl测试 239

常见优化措施 240

有得必有失 240

优化各有不同 241

正则表达式的应用原理 241

应用之前的优化措施 242

通过传动装置进行优化 246

优化正则表达式本身 247

提高表达式速度的诀窍 252

常识性优化 254

将文字文本独立出来 255

将锚点独立出来 256

忽略优先还是匹配优先?具体情况具体分析 256

拆分正则表达式 257

模拟开头字符识别 258

使用固化分组和占有优先量词 259

主导引擎的匹配 260

消除循环 261

方法1:依据经验构建正则表达式 262

真正的“消除循环”解法 264

方法2:自顶向下的视角 266

方法3:匹配主机名 267

观察 268

使用固化分组和占有优先量词 268

简单的消除循环的例子 270

消除C语言注释匹配的循环 272

流畅运转的表达式 277

引导匹配的工具 277

引导良好的正则表达式速度很快 279

完工 281

总结:开动你的大脑 281

第7章:Perl 283

作为语言组件的正则表达式 285

Perl的长处 286

Perl的短处 286

Perl的正则流派 286

正则运算符和正则文字 288

正则文字的解析方式 292

正则修饰符 292

正则表达式相关的Perl教义 293

表达式应用场合 294

动态作用域及正则匹配效应 295

匹配修改的特殊变量 299

qr/…/运算符与regex对象 303

构建和使用regex对象 303

探究regex对象 305

用regex对象提高效率 306

Match运算符 306

Match的正则运算元 307

指定目标运算元 308

Match运算符的不同用途 309

迭代匹配:Scalar Context,使用/g 312

Match运算符与环境的关系 316

Substitution运算符 318

运算元replacement 319

/e修饰符 319

应用场合与返回值 321

Split运算符 321

Split基础知识 322

返回空元素 324

Split中的特殊Regex运算元 325

Split中带捕获型括号的match运算元 326

巧用Perl的专有特性 326

用动态正则表达式结构匹配嵌套结构 328

使用内嵌代码结构 331

在内嵌代码结构中使用local函数 335

关于内嵌代码和my变量的忠告 338

使用内嵌代码匹配嵌套结构 340

正则文字重载 341

正则文字重载的问题 344

模拟命名捕获 344

效率 347

办法不只一种 348

表达式编译、/o修饰符、qr/???/和效率 348

理解“原文”副本 355

Study函数 359

性能测试 360

正则表达式调试信息 361

结语 363

第8章:Java 365

Java的正则流派 366

Java对\p{…}和\P{…}的支持 369

Unicode行终结符 370

使用java.util.regex 371

The Pattern.compile() Factory 372

Pattern的matcher方法 373

Matcher对象 373

应用正则表达式 375

查询匹配结果 376

简单查找-替换 378

高级查找-替换 380

原地查找-替换 382

Matcher的检索范围 384

方法链 389

构建扫描程序 389

Matcher的其他方法 392

Pattern的其他方法 394

Pattern的split方法,单个参数 395

Pattern的split方法,两个参数 396

拓展示例 397

为Image Tag添加宽度和高度属性 397

对于每个Matcher,使用多个Pattern校验HTML 399

解析CSV文档 401

Java版本差异 401

1.4.2和1.5.0之间的差异 402

1.5.0和1.6之间的差异 403

第9章:.NET 405

.NET的正则流派 406

对于流派的补充 409

使用.NET正则表达式 413

正则表达式快速入门 413

包概览 415

核心对象概览 416

核心对象详解 418

创建Regex对象 419

使用Regex对象 421

使用Match对象 427

使用Group对象 430

静态“便捷”函数 431

正则表达式缓存 432

支持函数 432

.NET高级话题 434

正则表达式装配件 434

匹配嵌套结构 436

Capture对象 437

第10章:PHP 439

PHP的正则流派 441

Preg函数接口 443

“Pattern”参数 444

Preg函数罗列 449

preg_match 449

preg_match_all 453

preg_replace 458

preg_replace_callback 463

preg_split 465

preg_grep 469

preg_quote 470

“缺失”的preg函数 471

preg_regex_to_pattern 472

对未知的Pattern参数进行语法检查 474

对未知正则表达式进行语法检查 475

递归的正则表达式 475

匹配嵌套括号内的文本 475

不能回溯到递归调用之内 477

匹配一组嵌套的括号 478

效率 478

模式修饰符S:“研究” 478

扩展示例 480

用PHP解析CSV 480

检查tagged data的嵌套正确性 481

索引 485

......(更多)

读书文摘

一类中单词起始位置分界符合结束位置分界符是相同的(通常是\<和\>)

……使用环视功能可以……但是某些时候,处理各种极端情形会降低成本/收益的比例。某些情况下,更合适的做法就是不依赖正则表达式完成全部工作。

......(更多)

猜你喜欢

点击查看