正则指引(第2版)

正则指引(第2版)

查阅电子书
手机扫码
  • 微信扫一扫

    关注微信公众号

因版权原因待上架

编辑推荐

文本自动化处理黑魔法,贴近中文世界。

内容简介

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

作者简介

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

章节目录

版权信息

引子: 关于正则表达式……

引入正则表达式

引入正则表达式之后

返璞归真 ——评《正则指引》

克制我们内心的冲动

前言

本书结构

本书的读者对象

致谢

读者服务

第一部分

第1章 字符组

1.1 普通字符组

1.2 关于Python的基础知识

1.3 普通字符组(续)

1.4 元字符与转义

1.5 排除型字符组

1.6 字符组简记法

1.7 字符组运算

1.8 POSIX字符组

第2章 量词

2.1 一般形式

2.2 常用量词

2.3 数据提取

2.4 点号

2.5 滥用点号的问题

2.6 忽略优先量词

2.7 转义

第3章 括号

3.1 分组

3.2 多选结构

3.3 引用分组

3.3.1 反向引用

3.3.2 各种引用的记法

3.3.3 命名分组

3.4 非捕获分组

3.5 补充

3.5.1 转义

3.5.2 URL Rewrite

3.5.3 一个例子

第4章 断言

4.1 单词边界

4.2 行起始/结束位置

4.3 环视

4.4 补充

4.4.1 环视的价值

4.4.2 环视与分组编号

4.4.3 环视的支持程度

4.4.4 环视的组合

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

4.4.6 逆序环视的诡异之处

第5章 匹配模式

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

5.2 单行模式

5.3 多行模式

5.4 注释模式

5.5 补充

5.5.1 更多的模式

5.5.2 修饰符的作用范围

5.5.3 失效修饰符

5.5.4 模式与反向引用

5.5.5 冲突策略

5.5.6 哪种方式更好

第6章 其他

6.1 转义

6.1.1 字符串转义与正则转义

6.1.2 元字符的转义

6.1.3 彻底消除元字符的特殊含义

6.1.4 字符组中的转义

6.2 正则表达式的处理形式

6.2.1 函数式处理

6.2.2 面向对象式处理

6.2.3 比较

6.2.4 线程安全性

6.3 表达式中的优先级

6.4 回车和换行

第二部分

第7章 Unicode

7.1 基础知识

7.2 关于编码

7.3 尽量使用Unicode编码

7.4 Unicode与字符组简记法

7.5 规范化问题

7.6 单词边界

7.7 码值转义序列

7.8 Unicode属性

7.8.1 Unicode Property

7.8.2 Unicode Block

7.8.3 Unicode Script

7.9 Unicode属性列表

7.9.1 Unicode Property

7.9.2 Unicode Block

7.9.3 Unicode Script

7.10 POSIX字符组

7.11 Emoji

第8章 匹配原理

8.1 有穷自动机

8.2 正则表达式的匹配过程

8.3 回溯

8.4 NFA和DFA

第9章 常见问题的解决思路

9.1 关于元素的三种逻辑

9.1.1 必须出现

9.1.2 可能出现

9.1.3 不能出现

9.2 正则表达式的常见操作

9.2.1 提取

9.2.2 验证

9.2.3 替换

9.2.4 切分

9.3 正则表达式的优化建议

9.3.1 使用缓存

9.3.2 尽量准确地表达意图

9.3.3 避免重复匹配

9.3.4 独立出文本和锚点

9.4 别过分依赖正则表达式

9.4.1 彻底放弃字符串操作

9.4.2 思维定式

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

9.4.4 滥用正则表达式

第三部分

第10章 .NET

10.1 预备知识

10.2 正则功能详解

10.2.1 列表

10.2.2 字符组

10.2.3 Unicode属性

10.2.4 字符组简记法

10.2.5 单词边界

10.2.6 行起始/结束位置

10.2.7 环视

10.2.8 匹配模式

10.2.9 捕获分组的引用

10.3 正则API简介

10.3.1 Regex

10.3.1.1 Static String Escape(String text)

10.3.1.2 String[] GetGroupNames()

10.3.1.3 int[] GetGroupNumbers()

10.3.1.4 bool IsMatch(String input)

10.3.1.5 String Replace(String input, String replacement)

10.3.1.6 String[] Split(String input)

10.3.2 Match

10.4 常用操作示例

10.4.1 验证

10.4.2 提取

10.4.3 替换

10.4.4 切分

第11章 Java

11.1 预备知识

11.2 正则功能详解

11.2.1 列表

11.2.2 字符组

11.2.3 Unicode属性

11.2.4 字符组简记法

11.2.5 单词边界

11.2.6 行起始/结束位置

11.2.7 环视

11.2.8 匹配模式

11.2.9 纯文本模式

11.2.10 捕获分组的引用

11.3 正则API简介

11.3.1 Pattern

11.3.1.1 static boolean matches(String regex, CharSequence input)

11.3.1.2 String[] split(CharSequence text)

11.3.1.3 String[] split(CharSequence text, int limit)

11.3.1.4 static String quote(String text)

11.3.2 Matcher

11.3.2.1 String group(int n)

11.3.2.2 String group()

11.3.2.3 int groupCount()

11.3.2.4 int start(n)

11.3.2.5 int start()

11.3.2.6 int end(n)

11.3.2.7 int end()

11.3.2.8 String replaceAll(String replacement)

11.3.2.9 Matcher appendReplacement(StringBuffer sb, String replacement)

11.3.2.10 Matcher appendTail(StringBuffer sb)

11.3.3 String

11.3.3.1 boolean matches(String regex)

11.3.3.2 String replaceFirst(String regex, String replacement)

11.3.3.3 String replaceAll(String regex, String replacement)

11.3.3.4 String[] split(String regex)

11.3.3.5 String[] split(String regex, int limit)

11.4 常用操作示例

11.4.1 验证

11.4.2 提取

11.4.3 替换

11.4.4 切分

11.5 Java 8和Java 9的新改进

11.5.1 Java 8的新改进

11.5.2 Java 9的新改进

第12章 JavaScript

12.1 预备知识

12.2 正则功能详解

12.2.1 列表

12.2.2 字符组

12.2.3 字符组简记法

12.2.4 单词边界

12.2.5 行起始/结束位置

12.2.6 环视

12.2.7 匹配模式

12.2.8 捕获分组的引用

12.3 正则API简介

12.3.1 RegExp

12.3.1.1 RegExp.exec(string)

12.3.1.2 RegExp.test(string)

12.3.2 String

12.3.2.1 string.match(RegExp)

12.3.2.2 string.search(RegExp)

12.3.2.3 string.replace(RegExp, replacement)

12.3.2.4 string.replace(RegExp, function)

12.3.2.5 string.split(RegExp)

12.4 常用操作示例

12.4.1 验证

12.4.2 提取

12.4.3 替换

12.4.4 切分

12.5 关于ActionScript

12.5.1 RegExp

12.5.2 匹配规则

12.5.3 匹配模式

12.5.4 正则API

第13章 PHP

13.1 预备知识

13.2 正则功能详解

13.2.1 列表

13.2.2 字符组

13.2.3 Unicode属性

13.2.4 字符组简记法

13.2.5 单词边界

13.2.6 行起始/结束位置

13.2.7 环视

13.2.8 匹配模式

13.2.9 纯文本模式

13.2.10 捕获分组的引用

13.3 正则API简介

13.3.1 PREG 常量说明

13.3.1.1 PREG_PATTERN_ORDER

13.3.1.2 PREG_SET_ORDER

13.3.1.3 PREG_SPLIT_OFFSET_CAPTURE

13.3.1.4 PREG_OFFSET_CAPTURE

13.3.1.5 PREG_SPLIT_NO_EMPTY

13.3.1.6 PREG_SPLIT_DELIMI_CAPTURE

13.3.1.7 PREG_NO_ERROR

13.3.1.8 PREG_INTERNAL_ERROR

13.3.1.9 PREG_BACKTRACK_LIMIT_ERROR

13.3.1.10 PREG_RECURSION_LIMIT_ERROR

13.3.1.11 PREG_BAD_UTF8_ERROR

13.3.1.12 PREG_BAD_UTF8_OFFSET_ERROR

13.3.1.13 PCRE_VERSION

13.3.2 preg_quote

13.3.3 preg_ grep

13.3.4 preg_match

13.3.5 preg_match_all

13.3.6 preg_last_error

13.3.7 preg_replace

13.3.8 preg_replace_callback

13.3.9 preg_filter

13.3.10 preg_split

13.3.11 preg_replace_callback_array

13.4 常见的正则操作举例

13.4.1 验证

13.4.2 提取

13.4.3 替换

13.4.4 切分

第14章 Python

14.1 预备知识

14.2 正则功能详解

14.2.1 列表

14.2.2 字符组

14.2.2.1 Python 2

14.2.2.2 Python 3

14.2.2.3 关于编码

14.2.3 Unicode属性

14.2.4 字符组简记法

14.2.4.1 Python 2

14.2.4.2 Python 3

14.2.5 单词边界

14.2.5.1 Python 2

14.2.5.2 Python 3

14.2.6 行起始/结束位置

14.2.7 环视

14.2.8 匹配模式

14.2.9 捕获分组的引用

14.2.10 条件匹配

14.3 正则API简介

14.3.1 RegexObject

14.3.2 re.compile(regex[, flags])

14.3.3 re.search(pattern, string[, flags])

14.3.4 MatchObject

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

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

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

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

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

14.4 常用操作示例

14.4.1 验证

14.4.2 提取

14.4.3 替换

14.4.4 切分

第15章 Ruby

15.1 预备知识

15.2 正则功能详解

15.2.1 列表

15.2.2 字符组

15.2.3 Unicode属性

15.2.4 字符组简记法

15.2.5 单词边界

15.2.6 行起始/结束位置

15.2.7 环视

15.2.8 匹配模式

15.2.9 捕获分组的引用

15.3 正则API简介

15.3.1 Regexp

15.3.2 Regexp.match(text)

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

15.3.4 String.index(Regexp)

15.3.5 String.scan(Regexp)

15.3.6 String.slice(Regexp)

15.3.7 String.split(Regexp)

15.3.8 String.sub(Regexp, Str)

15.3.9 String.gsub(Regexp, String)

15.4 常用操作示例

15.4.1 验证

15.4.2 提取

15.4.3 替换

15.4.4 切分

15.5 Ruby 1.9的新变化

第16章 Objective-C

16.1 预备知识

16.2 正则功能详解

16.2.1 列表

16.2.2 字符组

16.2.3 Unicode属性

16.2.4 字符组简记法

16.2.5 单词边界

16.2.6 行起始/结束位置

16.2.7 环视

16.2.8 匹配模式

16.2.9 纯文本模式

16.2.10 捕获分组的引用

16.2.11 命名分组

16.3 正则API简介

16.3.1 predicateWithFormat

16.3.2 rangeOfString

16.3.3 regularExpressionWithPattern

16.3.4 initWithPattern

16.3.5 pattern

16.3.6 numberOfCaptureGroups

16.3.7 numberOfMatchesInString

16.3.8 stringByReplacingMatchesInString

16.3.9 replacingMatchesInString

16.3.10 escapedPatternForString

16.3.11 escapedTemplateForString

16.4 常用操作示例

16.4.1 验证

16.4.2 提取

16.4.3 替换

16.4.4 切分

第17章 Golang

17.1 预备知识

17.2 正则功能详解

17.2.1 列表

17.2.2 字符组

17.2.3 Unicode属性

17.2.4 字符组简记法

17.2.5 单词边界

17.2.6 行起始/结束位置

17.2.7 环视

17.2.8 匹配模式

17.2.9 纯文本模式

17.2.10 捕获分组的引用

17.2.11 命名分组

17.3 正则API简介

17.3.1 Compile和MustCompile

17.3.2 MatchString

17.3.3 FindString

17.3.4 FindAllString

17.3.5 FindStringIndex

17.3.6 FindAllStringIndex

17.3.7 FindStringSubmatch

17.3.8 FindAllStringSubmatch

17.3.9 SubexpNames

17.3.10 Split

17.3.11 ReplaceAllString

17.3.12 ReplaceAllLiteralString

17.4 常用操作示例

17.4.1 验证

17.4.2 提取

17.4.3 替换

17.4.4 切分

第18章 Linux/UNIX

18.1 POSIX

18.1.1 POSIX规范

18.1.1.1 BRE

18.1.1.2 ERE

18.1.2 POSIX字符组

18.2 vi

18.2.1 字符组及简记法

18.2.2 量词

18.2.3 多选结构和捕获分组

18.2.4 环视

18.2.5 锚点和单词边界

18.2.6 替换操作的特殊字符

18.2.7 replacement中的特殊变量

18.2.8 补充

18.3 grep

18.3.1 基本用法

18.3.2 字符组

18.3.3 锚点和单词边界

18.3.4 量词

18.3.5 多选结构和捕获分组

18.3.6 options

18.3.7 egrep和fgrep

18.3.8 补充

18.4 awk

18.4.1 基本用法

18.4.2 字符组及简记法

18.4.3 锚点和单词边界

18.4.4 量词

18.4.5 多选结构

18.4.6 补充

18.5 sed

18.5.1 基本用法

18.5.2 字符组及简记法

18.5.3 锚点和单词边界

18.5.4 量词

18.5.5 多选结构和捕获分组

18.5.6 options

18.5.7 补充

18.6 总结

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

附录B 常用的正则表达式

整数

十六进制数

MD5字符串

浮点数

逗号分隔的整数

中文字符

中文间多余的空白字符

价格

手机号码

固定电话号码

邮政编码

身份证号码

QQ号

ISBN号

IPv4地址

IPv6地址

时间字符串

日期字符串

Windows路径

UNIX路径

主机名

电子邮件地址

URL

HTML Entity

HTML tag

Title tag

成对的tag

img tag

table tag

href tag

JavaScript代码

XML格式注释

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

在线类

RegexPal

Larsolavtorvik

ReWork

Nregex

Rubular

MyRegexp

RegExLib

Regular-Expressions

软件类

Expresso

RegexBuddy

PowerGREP

JFLAP

RegexUtil

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

正则指引(第2版)是2018年由电子工业出版社出版,作者余晟。

得书感谢您对《正则指引(第2版)》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。