正则指引(第2版)

正则指引(第2版)
作 者: 余晟
出版社: 电子工业出版社
丛编项:
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: 暂缺
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  余晟,非正统型技术爱好者,有多年研发经验,目前在在线教育行业从事研发与架构管理的工作。在强调技术追求的同时,倡导全面、完整的技术路线和技术文化,业余写作、翻译、审校了若干技术图书。个人公众号为“余晟以为”(yurii-says)。

内容简介

《正则指引(第2版)》综合作者自己遇到的实际问题,以及其他开发人员咨询的问题,总结出一套巧妙运用正则表达式的办法,并通过具体的例子指导读者拆解、分析问题。《正则指引(第2版)》分为三部分:第一部分主要讲解正则表达式的基础知识,涵盖了正则表达式中常见的各种功能和结构;第二部分主要讲解关于正则表达式的更深入的知识,详细探讨了编码问题、匹配原理、解题思路;第三部分将之前介绍的各种知识落实到常用语言.NET、Java、JavaScript、PHP、Python、Ruby、Objective-C、Golang中,在详细介绍了在这些语言中正则表达式的具体用法之外,还辨析了版本之间的细微差异。《正则指引(第2版)》既可以作为专门的学习用书,也可以作为备查的参考手册。

图书目录

部分

第1章 字符组 .................2

1.1 普通字符组 ............. 2

1.2 关于Python的基础知识........................... 4

1.3 普通字符组(续) . 6

1.4 元字符与转义 ......... 8

1.5 排除型字符组 ....... 10

1.6 字符组简记法 ....... 12

1.7 字符组运算 ........... 14

1.8 POSIX字符组 ...... 15

第2章 量词 ...................17

2.1 一般形式 ............... 17

2.2 常用量词 ............... 19

2.3 数据提取 ............... 21

2.4 点号....................... 23

2.5 滥用点号的问题 ... 23

2.6 忽略优先量词 ....... 26

2.7 转义....................... 31

第3章 括号 ...................33

3.1 分组....................... 33

3.2 多选结构 ............... 39

3.3 引用分组 ............... 44

3.3.1 反向引用... 48

3.3.2 各种引用的记法 .......................... 50

3.3.3 命名分组... 53

3.4 非捕获分组 ........... 55

3.5 补充....................... 56

3.5.1 转义 .......... 56

3.5.2 URL Rewrite ................................ 56

3.5.3 一个例子... 58

第4章 断言 ...................60

4.1 单词边界 ............... 60

4.2 行起始/结束位置 .. 62

4.3 环视....................... 69

4.4 补充....................... 75

4.4.1 环视的价值 .................................. 75

4.4.2 环视与分组编号 .......................... 76

4.4.3 环视的支持程度 .......................... 77

4.4.4 环视的组合 .................................. 79

4.4.5 断言和反向引用之间的关系 ...... 81

4.4.6 逆序环视的诡异之处 .................. 81

第5章 匹配模式 ............83

5.1 不区分大小写模式与模式的指定方式 .. 83

5.2 单行模式 ............... 86

5.3 多行模式 ............... 87

5.4 注释模式 ............... 89

5.5 补充....................... 91

5.5.1 更多的模式 .................................. 91

5.5.2 修饰符的作用范围 ...................... 91

5.5.3 失效修饰符 .................................. 92

5.5.4 模式与反向引用 .......................... 93

5.5.5 冲突策略... 93

5.5.6 哪种方式更好 .............................. 94

第6章 其他 ...................95

6.1 转义....................... 95

6.1.1 字符串转义与正则转义 .............. 95

6.1.2 元字符的转义 .............................. 99

6.1.3 彻底消除元字符的特殊含义 .... 101 6.1.4 字符组中的转义 ........................ 103 6.2 正则表达式的处理形式 ........................ 103

6.2.1 函数式处理 ................................ 104

6.2.2 面向对象式处理 ........................ 104

6.2.3 比较 ........ 105

6.2.4 线程安全性 ................................ 106

6.3 表达式中的优先级 ................................ 108

6.4 回车和换行 ......... 109

第二部分

第7章 Unicode ...........112

7.1 基础知识 ............. 112

7.2 关于编码 ............. 115

7.3 尽量使用Unicode编码 ........................ 116

7.4 Unicode与字符组简记法 ..................... 120

7.5 规范化问题 ......... 122

7.6 单词边界 ............. 123

7.7 码值转义序列 ..... 125

7.8 Unicode属性 ...... 127

7.8.1 Unicode Property ....................... 128

7.8.2 Unicode Block ........................... 128

7.8.3 Unicode Script ........................... 129

7.9 Unicode属性列表 ................................. 130

7.9.1 Unicode Property ....................... 130

7.9.2 Unicode Block ........................... 131

7.9.3 Unicode Script ........................... 135

7.10 POSIX字符组 .. 135

7.11 Emoji ................. 136

第8章 匹配原理 ..........138

8.1 有穷自动机 ......... 138

8.2 正则表达式的匹配过程 ........................ 139

8.3 回溯..................... 142

8.4 NFA和DFA ....... 144 第9章 常见问题的解决思路 ...........................146

9.1 关于元素的三种逻辑 ............................ 146

9.1.1 必须出现. 147

9.1.2 可能出现. 147

9.1.3 不能出现. 148

9.2 正则表达式的常见操作 ........................ 150

9.2.1 提取 ........ 150

9.2.2 验证 ........ 156

9.2.3 替换 ........ 160

9.2.4 切分 ........ 165

9.3 正则表达式的优化建议 ........................ 167

9.3.1 使用缓存. 167

9.3.2 尽量准确地表达意图 ................ 168

9.3.3 避免重复匹配 ............................ 168

9.3.4 独立出文本和锚点 .................... 169

9.4 别过分依赖正则表达式 ........................ 170

9.4.1 彻底放弃字符串操作 ................ 170

9.4.2 思维定式. 171

9.4.3 正则表达式可以匹配各种文本 172

9.4.4 滥用正则表达式 ........................ 173

第三部分

第10章 .NET ..............176

10.1 预备知识 ........... 176

10.2 正则功能详解 ... 177

10.2.1 列表 .... 177

10.2.2 字符组 178

10.2.3 Unicode属性 ......................... 178

10.2.4 字符组简记法........................ 179

10.2.5 单词边界 ............................... 179

10.2.6 行起始/结束位置 .................. 180

10.2.7 环视 .... 181

10.2.8 匹配模式 ............................... 181

10.2.9 捕获分组的引用 .................... 182 10.3 正则API简介 .. 183

10.3.1 Regex .. 183

10.3.2 Match .. 187

10.4 常用操作示例 ... 188

10.4.1 验证 .... 188

10.4.2 提取 .... 189

10.4.3 替换 .... 189

10.4.4 切分 .... 190

第11章 Java ..............191

11.1 预备知识 ........... 191

11.2 正则功能详解 ... 192

11.2.1 列表 .... 192

11.2.2 字符组. 192

11.2.3 Unicode属性 ......................... 194

11.2.4 字符组简记法 ........................ 194

11.2.5 单词边界 ................................ 194

11.2.6 行起始/结束位置 ................... 195

11.2.7 环视 .... 196

11.2.8 匹配模式 ................................ 196

11.2.9 纯文本模式 ............................ 197

11.2.10 捕获分组的引用 .................. 197

11.3 正则API简介 .. 197

11.3.1 Pattern . 198

11.3.2 Matcher .................................. 200

11.3.3 String ... 203

11.4 常用操作示例 ... 204

11.4.1 验证 .... 204

11.4.2 提取 .... 204

11.4.3 替换 .... 205

11.4.4 切分 .... 206

11.5 Java 8和Java 9的新改进 ................... 206

11.5.1 Java 8的新改进 ..................... 206

11.5.2 Java 9的新改进 ..................... 207 第12章 JavaScript .....208

12.1 预备知识 ........... 208

12.2 正则功能详解 ... 209

12.2.1 列表 .... 209

12.2.2 字符组 210

12.2.3 字符组简记法........................ 211

12.2.4 单词边界 ............................... 211

12.2.5 行起始/结束位置 .................. 212

12.2.6 环视 .... 212

12.2.7 匹配模式 ............................... 213

12.2.8 捕获分组的引用 .................... 214

12.3 正则API简介 .. 215

12.3.1 RegExp 215

12.3.2 String ... 218

12.4 常用操作示例 ... 221

12.4.1 验证 .... 221

12.4.2 提取 .... 222

12.4.3 替换 .... 223

12.4.4 切分 .... 223

12.5 关于ActionScript ................................ 223

12.5.1 RegExp 223

12.5.2 匹配规则 ............................... 224

12.5.3 匹配模式 ............................... 224

12.5.4 正则API ................................ 224

第13章 PHP ...............225

13.1 预备知识 ........... 225

13.2 正则功能详解 ... 227

13.2.1 列表 .... 227

13.2.2 字符组 228

13.2.3 Unicode属性 ......................... 229

13.2.4 字符组简记法........................ 229

13.2.5 单词边界 ............................... 230

13.2.6 行起始/结束位置 .................. 230

13.2.7 环视 .... 231

13.2.8 匹配模式 ............................... 231 13.2.9 纯文本模式 ........................... 232

13.2.10 捕获分组的引用 .................. 232

13.3 正则API简介 .. 233

13.3.1 PREG 常量说明 ................... 233

13.3.2 preg_quote ............................. 235

13.3.3 preg_ grep .............................. 235

13.3.4 preg_match ............................. 236

13.3.5 preg_match_all ....................... 237

13.3.6 preg_last_error ....................... 239

13.3.7 preg_replace ........................... 239

13.3.8 preg_replace_callback ............ 240

13.3.9 preg_filter ............................... 240

13.3.10 preg_split ............................. 241

13.3.11 preg_replace_callback_array 242

13.4 常见的正则操作举例 .......................... 243

13.4.1 验证 .... 243

13.4.2 提取 .... 243

13.4.3 替换 .... 244

13.4.4 切分 .... 244

第14章 Python ...........245

14.1 预备知识 ........... 245

14.2 正则功能详解 ... 246

14.2.1 列表 .... 246

14.2.2 字符组 247

14.2.3 Unicode属性 ......................... 248

14.2.4 字符组简记法........................ 249

14.2.5 单词边界 ............................... 250

14.2.6 行起始/结束位置 .................. 251

14.2.7 环视 .... 252

14.2.8 匹配模式 ............................... 252

14.2.9 捕获分组的引用 .................... 253

14.2.10 条件匹配 ............................. 253

14.3 正则API简介 .. 254

14.3.1 RegexObject ........................... 254

14.3.2 re.compile(regex[, flags]) ....... 255 14.3.3 re.search(pattern, string[, flags]) ............................... 256

14.3.4 MatchObject ........................... 256

14.3.5 re.match(pattern, string[, flags]) ................................ 257

14.3.6 re.findall(pattern, string[, flags]) ............................... 258

14.3.7 re.finditer(pattern, string[, flags]) .............................. 258

14.3.8 re.split(pattern, string[, maxsplit=0, flags=0]) .......... 259

14.3.9 re.sub(pattern, repl, string[, count, flags]) ................. 259

14.4 常用操作示例 ... 260

14.4.1 验证 .... 260

14.4.2 提取 .... 261

14.4.3 替换 .... 262

14.4.4 切分 .... 262

第15章 Ruby ..............263

15.1 预备知识 ........... 263

15.2 正则功能详解 ... 264

15.2.1 列表 .... 264

15.2.2 字符组 264

15.2.3 Unicode属性 ......................... 265

15.2.4 字符组简记法........................ 266

15.2.5 单词边界 ............................... 266

15.2.6 行起始/结束位置 .................. 267

15.2.7 环视 .... 268

15.2.8 匹配模式 ............................... 268

15.2.9 捕获分组的引用 .................... 269

15.3 正则API简介 .. 269

15.3.1 Regexp 269

15.3.2 Regexp.match(text) ................ 271

15.3.3 Regexp.quote(text)和Regexp.escape(text) ............... 272

15.3.4 String.index(Regexp) ............. 273

15.3.5 String.scan(Regexp) ............... 273

15.3.6 String.slice(Regexp) ............... 274

15.3.7 String.split(Regexp) ............... 274

15.3.8 String.sub(Regexp, Str) .......... 275

15.3.9 String.gsub(Regexp, String) ... 276

15.4 常用操作示例 ... 276 15.4.1 验证 .... 276

15.4.2 提取 .... 277

15.4.3 替换 .... 277

15.4.4 切分 .... 277

15.5 Ruby 1.9的新变化 .............................. 278

第16章 Objective-C ..280

16.1 预备知识 ........... 280

16.2 正则功能详解 ... 282

16.2.1 列表 .... 282

16.2.2 字符组 283

16.2.3 Unicode属性 ......................... 284

16.2.4 字符组简记法........................ 284

16.2.5 单词边界 ............................... 285

16.2.6 行起始/结束位置 .................. 286

16.2.7 环视 .... 287

16.2.8 匹配模式 ............................... 287

16.2.9 纯文本模式 ........................... 288

16.2.10 捕获分组的引用 .................. 289

16.2.11 命名分组 .............................. 290

16.3 正则API简介 .. 291

16.3.1 predicateWithFormat .............. 291

16.3.2 rangeOfString ......................... 292

16.3.3 regularExpressionWithPattern 292

16.3.4 initWithPattern ....................... 292

16.3.5 pattern . 293

16.3.6 numberOfCaptureGroups ....... 293

16.3.7 numberOfMatchesInString ..... 293

16.3.8 stringByReplacingMatchesInString .......................... 294

16.3.9 replacingMatchesInString ...... 294

16.3.10 escapedPatternForString ...... 294

16.3.11 escapedTemplateForString ... 295

16.4 常用操作示例 ... 295

16.4.1 验证 .... 295

16.4.2 提取 .... 295 16.4.3 替换 .... 297

16.4.4 切分 .... 298

第17章 Golang...........299

17.1 预备知识 ........... 299

17.2 正则功能详解 ... 301

17.2.1 列表 .... 301

17.2.2 字符组 301

17.2.3 Unicode属性 ......................... 302

17.2.4 字符组简记法........................ 303

17.2.5 单词边界 ............................... 303

17.2.6 行起始/结束位置 .................. 303

17.2.7 环视 .... 304

17.2.8 匹配模式 ............................... 304

17.2.9 纯文本模式 ........................... 305

17.2.10 捕获分组的引用 .................. 305

17.2.11 命名分组 .............................. 306

17.3 正则API简介 .. 307

17.3.1 Compile和MustCompile ...... 307

17.3.2 MatchString ........................... 308

17.3.3 FindString .............................. 308

17.3.4 FindAllString ......................... 309

17.3.5 FindStringIndex ..................... 309

17.3.6 FindAllStringIndex ................ 309

17.3.7 FindStringSubmatch .............. 309

17.3.8 FindAllStringSubmatch ......... 310

17.3.9 SubexpNames ........................ 310

17.3.10 Split ... 311

17.3.11 ReplaceAllString .................. 311

17.3.12 ReplaceAllLiteralString ....... 312

17.4 常用操作示例 ... 312

17.4.1 验证 .... 312

17.4.2 提取 .... 312

17.4.3 替换 .... 313

17.4.4 切分 .... 313 第18章 Linux/UNIX ....314

18.1 POSIX ............... 314

18.1.1 POSIX规范 ........................... 314

18.1.2 POSIX字符组 ....................... 316

18.2 vi ....................... 317

18.2.1 字符组及简记法 .................... 317

18.2.2 量词 .... 318

18.2.3 多选结构和捕获分组 ............ 319

18.2.4 环视 .... 319

18.2.5 锚点和单词边界 .................... 319

18.2.6 替换操作的特殊字符 ............ 320

18.2.7 replacement中的特殊变量 ... 322

18.2.8 补充 .... 322

18.3 grep ................... 323

18.3.1 基本用法 ............................... 323

18.3.2 字符组 324

18.3.3 锚点和单词边界 .................... 324

18.3.4 量词 .... 324

18.3.5 多选结构和捕获分组 ............ 325

18.3.6 options . 325

18.3.7 egrep和fgrep ........................ 326

18.3.8 补充 .... 327

18.4 awk .................... 327

18.4.1 基本用法 ............................... 327

18.4.2 字符组及简记法 .................... 328

18.4.3 锚点和单词边界 .................... 329

18.4.4 量词 .... 329

18.4.5 多选结构 ............................... 330

18.4.6 补充 .... 330

18.5 sed ..................... 330

18.5.1 基本用法 ............................... 330

18.5.2 字符组及简记法 .................... 331

18.5.3 锚点和单词边界 .................... 331

18.5.4 量词 .... 332

18.5.5 多选结构和捕获分组 ............ 332 18.5.6 options . 333

18.5.7 补充 .... 333

18.6 总结................... 334

附录A 常用语言中正则特性一览 ....................337

附录B 常用的正则表达式 ...............................340

附录C 常用的正则表达式工具及资源 .............356

正则表达式术语中英文对照表 ...........................363