编辑推荐
正则表达式是一种威力无比强大的武器,可以完成各种复杂的文本处理工作,被称为程序员的“瑞士军刀”。
《正则表达式必知必会(修订版)》是全球程序员公认的正则表达式速成教材。它精选了正则表达式中最常用、最重要的知识,从简单的文本匹配开始,通过简明又实用的示例,循序渐进地介绍更高级的内容,包括回溯引用、前后查找、嵌入条件等。而且书中的内容在保持语言和平台中立的同时,还兼顾了各种平台之间的差异。通过阅读本书,读者能够在轻松的氛围中迅速掌握正则表达式的精髓,并可立即运用所学,解决实际问题。
内容简介
正则表达式是一种威力无比强大的武器,可以完成各种复杂的文本处理工作,被称为程序员的“瑞士军刀”。
《正则表达式必知必会(修订版)》是全球程序员公认的正则表达式速成教材。它精选了正则表达式中最常用、最重要的知识,从简单的文本匹配开始,通过简明又实用的示例,循序渐进地介绍更高级的内容,包括回溯引用、前后查找、嵌入条件等。而且书中的内容在保持语言和平台中立的同时,还兼顾了各种平台之间的差异。通过阅读本书,读者能够在轻松的氛围中迅速掌握正则表达式的精髓,并可立即运用所学,解决实际问题。
更多精彩,点击进入品牌店查阅>>
作者简介
《正则表达式必知必会(修订版)》从简单的文本匹配开始,循序渐进地介绍了很多复杂内容,其中包括回溯引用、条件性求值和前后查找,等等。每章都为读者准备了许多简明又实用的示例,有助于全面、系统、快速掌握正则表达式,并运用它们去解决实际问题。正则表达式是一种威力比强大的武器,几乎在所有的程序设计语言里和计算机平台上都可以用它来完成各种复杂的文本处理工作。而且《正则表达式必知必会(修订版)》的内容在保持语言和平台中立的同时,还兼顾了各种平台之间的差异。通过阅读本书,读者能够在轻松的氛圉中迅速掌握正则表达式的精髓,并可立即运用所学,解决实际问题。
精彩书评
BenForta,拥有三十多年的计算机领域从业经验,是世界知名的技术作家,也是Adobe技术界知名专家,目前担任Adobe公司的客户培训部高级主管。他撰写的《SQL必知必会》《MySQL必知必会》等因短小精悍、可快速入手而受到读者好评,已被翻译为十几种文字。
目录
第1章正则表达式入门1.1正则表达式的用途1.2如何使用正则表达式1.2.1用正则表达式进行搜索1.2.2用正则表达式进行替换1.3什么是正则表达式1.4使用正则表达式1.5在继续学习之前1.6小结
第2章匹配单个字符2.1匹配纯文本2.1.1有多个匹配结果2.1.2字母的大小写问题2.2匹配任意字符2.3匹配特殊字符2.4小结
第3章匹配一组字符3.1匹配多个字符中的某一个3.2利用字符集合区间3.3取非匹配3.4小结
第4章使用元字符4.1对特殊字符进行转义4.2匹配空白字符4.3匹配特定的字符类别4.3.1匹配数字(与非数字)4.3.2匹配字母和数字(与非字母和数字)4.3.3匹配空白字符(与非空白字符)4.3.4匹配十六进制或八进制数值4.4使用POSIX字符类4.5小结
第5章重复匹配5.1有多少个匹配5.1.1匹配一个或多个字符5.1.2匹配零个或多个字符5.1.3匹配零个或一个字符5.2匹配的重复次数5.2.1为重复匹配次数设定一个精确的值5.2.2为重复匹配次数设定一个区间5.2.3匹配"至少重复多少次"5.3防止过度匹配5.4小结
第6章位置匹配6.1边界6.2单词边界6.3字符串边界
6.4小结第7章使用子表达式7.1什么是子表达式7.2子表达式7.3子表达式的嵌套7.4小结
第8章回溯引用:前后一致匹配8.1回溯引用有什么用8.2回溯引用匹配8.3回溯引用在替换操作中的应用8.4小结
第9章前后查找9.1前后查找9.2向前查找9.3向后查找9.4把向前查找和向后查找结合起来9.5对前后查找取非9.6小结
第10章嵌入条件10.1为什么要嵌入条件10.2正则表达式里的条件10.2.1回溯引用条件10.2.2前后查找条件10.3小结
附录A常见应用软件和编程语言中的正则表达式附录B常见问题的正则表达式解决方案附录C正则表达式测试器
精彩书摘
9.5对前后查找取非 到目前为止正如你看到的那样,向前查找和向后查找通常用来匹配文本,其目的是为了确定将被返回为匹配结果的文本的位置(通过指定匹配结果的前后必须是哪些文本)。这种用法被称为正向前查找(positivelookahead)和正向后查找(positive lookbehind)。术语“正”指的是寻找匹配的事实。 前后查找还有一种不太常见的用法叫作负前后查找(negativelookaround)。负向前查找(negative lookahead)将向前查找不与给定模式相匹配的文本,负向后查找(negative lookbehind)将向后查找不与给定模式相匹配的文本。 我们在第3章曾经介绍过一个用来对字符集合进行取非处理的操作符;,但;不能用来对前后查找进行取非处理。这里必须使用另外一种语法:前后查找必须用!来取非(它将替换掉=)。表9—1列出了所有的前后查找操作符。
前言/序言
正则表达式(regularexpression)和正则表达式语言已经出现很多年了。正则表达式的专家们早就掌握了这种威力无比强大的武器,它可以用来完成各种复杂的文本处理工作。更重要的是,这种武器可以在几乎所有的程序设计语言里和几乎所有的计算机平台上使用。
这是个好消息,但我还要告诉你一个坏消息:长期以来,只有一些真正的专家才能真正掌握正则表达式。甚至有很多人根本没有听说过正则表达式这个概念,更不用说用它们来解决问题了。至于少数勇于涉猎正则表达式领域的人们,又往往会因为正则表达式难以理解而浅尝辄止或总是在原地徘徊。这不能不说是一种悲哀,因为正则表达式其实并没有人们想象中的那么复杂。只要你能清晰地理解你想要解决的问题并学会如何使用正则表达式,就可以轻而易举地解决这些问题。
正则表达式不为大多数人所掌握的原因之一是关于这方面的好资料太少了。虽然有很多网站在吹嘘它们的正则表达式教程如何全面,但实际情况却是高质量的正则表达式学习资源相当稀缺。即便能够找到几本介绍正则表达式的书,它们又往往过于偏重语法而显得不够实用——知道如何定义{或是知道+与*之间的区别并不等于真正掌握了正则表达式的用法。在笔者看来,那些书反而把简单的问题弄得更复杂了:在学习和使用正则表达式的时候,重要的并不是你知道多少个特殊字符,而是你会不会运用它们去解决实际问题。
你拿在手里的这本书并不打算成为一本正则表达式的大全。如果你想要的是那样一本书,你应该去阅读JeffreyFriedl编写的《精通正则表达式(第3版)》。Friedl先生是业内公认的正则表达式专家,他的书绝对是这方面最权威和全面的著作。本人对Friedl先生没有丝毫成见,但他的书不适合初学者也是实情;如果你只打算尽快完成手头的工作而不是要钻研正则表达式的内部原理,他的书也不很适用。这并不是说那本书里的信息没有用,只是它在你想要给HTML表单添加一些验证功能或者只想对解析的文本进行替换的时候派不上什么用场。如果你想尽快学会正则表达式的基本用法,你将发现自己陷入了一个两难境地:要么找不到简明易学的参考资料,要么找到的参考资料过于深奥而让你不知该如何起步。
这正是促使笔者编写本书的原因。本书所讲授的正则表达式知识正是你们在刚起步时最需要的,我们将从简单的文本匹配开始循序渐进地向大家介绍许多复杂的专题,其中包括回溯引用(backreference)、条件性求值(conditionalevaluation)和前后查找(lookingaround)等。本书最大的优势是所学到的知识可以立即运用于实践中:我们在每章里都为大家准备了许多简明又实用的示例,可以帮助你全面、系统、快速地掌握正则表达式并运用它们去解决实际问题,而每章在10分钟甚至更短的时间里就可以学完。
还等什么,赶快翻到第1章开始今天的学习吧,你肯定会立刻感受到正则表达式的强大威力。
目标读者
本书的目标读者是以下几类人员。
第一次接触正则表达式。
希望自己能够快速掌握正则表达式的基本用法。
想使用一种强大的工具(虽然它不那么容易掌握)去解决实际问题。
正在开发Web应用软件并需要进行复杂的表单和文本处理。
正使用着Perl、ASP、VisualBasic、.NET、C#、Java、JSP、PHP、ColdFusion语言(或更多其他程序设计语言),希望在开发的应用程序里使用正则表达式。
希望在不求助于其他人的前提下尽快掌握正则表达式。
《深入理解 Java:从入门到精通》 内容简介 《深入理解 Java:从入门到精通》是一本旨在为广大 Java 开发者,无论是初学者还是有一定经验的工程师,提供全面、深入 Java 语言学习路径的著作。本书并非泛泛而谈,而是聚焦于 Java 语言的核心概念、高级特性以及在实际开发中经常遇到的问题,通过理论与实践相结合的方式,引导读者构建扎实、牢固的 Java 基础,并逐步迈向精通的境界。 本书内容编排循序渐进,从 Java 语言最基础的语法特性入手,逐步深入到面向对象设计的精髓,再到并发编程、内存管理、JVM 原理等更深层次的主题。每一章节都力求清晰易懂,避免使用过于晦涩的术语,并通过丰富的代码示例和详尽的解释,帮助读者理解抽象的概念。 第一部分:Java 基础精讲 本部分是为 Java 初学者量身定制的入门指南,旨在帮助读者快速掌握 Java 编程的基本要素。 Java 语言概述与环境搭建: 介绍 Java 语言的起源、特点、发展历程,以及如何搭建 Java 开发环境,包括 JDK 的安装与配置、IDE 的选择与使用(如 IntelliJ IDEA、Eclipse)等。我们将深入讲解 Java 虚拟机 (JVM)、Java 运行时环境 (JRE) 和 Java 开发工具包 (JDK) 的关系,让读者从宏观上理解 Java 的运行机制。 基本语法与数据类型: 详细讲解 Java 的基本语法结构,包括变量、常量、运算符、表达式、语句等。重点介绍 Java 的八种基本数据类型(byte, short, int, long, float, double, char, boolean)以及它们的取值范围和使用注意事项。还会涉及包装类(Wrapper Classes)的概念及其与基本数据类型的区别与联系。 控制流程: 学习如何使用条件语句(if-else, switch)和循环语句(for, while, do-while)来控制程序的执行流程。通过实际案例,演示如何运用这些结构解决实际问题,并强调代码的可读性和效率。 数组与字符串: 深入讲解 Java 中数组的声明、初始化、访问和操作,以及多维数组的应用。同时,详细介绍 String 类的常用方法、字符串的不可变性、StringBuilder 和 StringBuffer 的区别与使用场景,这对于处理文本信息至关重要。 面向对象编程 (OOP) 基础: 这是 Java 语言的核心。我们将从类(Class)、对象(Object)、封装(Encapsulation)、继承(Inheritance)和多态(Polymorphism)这四大基本概念入手,用通俗易懂的语言和生动形象的比喻进行阐述。 类与对象: 讲解如何定义类,如何创建对象,以及类成员(属性和方法)的使用。 封装: 强调访问修饰符(public, private, protected, default)的作用,以及如何通过 getters 和 setters 方法实现数据的安全访问。 继承: 介绍 `extends` 关键字,子类与父类的关系,方法重写(Override)与方法重载(Overload)的区别,以及 `super` 关键字的用法。 多态: 解释运行时多态和编译时多态,以及接口(Interface)和抽象类(Abstract Class)在实现多态中的作用。 接口与抽象类: 深入探讨接口和抽象类的定义、实现和使用。理解它们在设计模式和代码复用中的重要性,并学会何时使用接口,何时使用抽象类。 异常处理: 学习 Java 的异常处理机制,包括 `try-catch-finally` 块、`throw` 和 `throws` 关键字。掌握如何捕获和处理运行时异常及受检异常,编写健壮的代码。 第二部分:Java 核心进阶 本部分将带领读者深入 Java 的核心特性,为构建复杂、高效的应用程序打下坚实基础。 集合框架 (Collections Framework): 详细介绍 Java 集合框架的体系结构,包括 `Collection` 接口及其主要实现类(如 `List`、`Set`、`Queue`)和 `Map` 接口及其主要实现类(如 `HashMap`、`TreeMap`)。讲解它们的特性、适用场景和性能特点,并重点分析 `ArrayList`、`LinkedList`、`HashSet`、`TreeSet`、`HashMap`、`TreeMap` 等类的内部实现原理。 泛型 (Generics): 讲解泛型的作用,如何声明和使用泛型类、泛型接口和泛型方法,以及泛型擦除(Type Erasure)的原理。泛型能够提高代码的类型安全性和复用性。 IO 流 (Input/Output Streams): 深入理解 Java 的 IO 流体系,包括字节流(`InputStream`, `OutputStream`)和字符流(`Reader`, `Writer`)的分类与使用。重点介绍常用的 IO 类,如 `FileInputStream`, `FileOutputStream`, `BufferedReader`, `BufferedWriter`, `ObjectInputStream`, `ObjectOutputStream`。还将探讨缓冲流、转换流、数据流以及 NIO (New IO) 的基本概念。 多线程与并发编程: 这是 Java 语言中最具挑战性但也最重要的一部分。我们将从线程的创建方式(继承 `Thread` 类、实现 `Runnable` 接口)开始,讲解线程的生命周期、线程同步(`synchronized` 关键字、`Lock` 接口)、线程通信(`wait()`, `notify()`, `notifyAll()`)、线程池(`ExecutorService`)以及并发工具类(如 `Semaphore`, `CountDownLatch`, `CyclicBarrier`)。深入剖析常见的并发问题,如竞态条件(Race Condition)、死锁(Deadlock)和活锁(Livelock)。 JVM 原理与内存管理: 揭秘 Java 虚拟机 (JVM) 的工作原理,包括类加载机制、内存区域划分(堆、栈、方法区、程序计数器、本地方法栈)以及垃圾回收(Garbage Collection)机制。理解堆内存的分配(新生代、老年代)、垃圾回收算法(如标记-清除、复制、标记-整理)以及 GC 日志的分析,能够帮助开发者写出更高效、内存占用更小的程序。 反射 (Reflection): 学习如何使用 Java 反射机制在运行时动态地获取类的信息、创建对象、调用方法和访问属性。理解反射的应用场景,如框架设计、单元测试和序列化。 注解 (Annotations): 讲解注解的定义、使用和元注解。掌握如何自定义注解,以及如何通过反射或 APT (Annotation Processing Tool) 来处理注解,实现代码的元数据管理和简化开发。 第三部分:Java 实践与设计 本部分将引导读者将所学的 Java 知识应用于实际开发,并提升代码设计能力。 常用 API 详解: 深入介绍 Java 标准库中一些常用且重要的类库,例如 `java.util` 中的日期时间 API (`java.time`)、`java.lang.Math`、`java.lang.System` 等,以及 `java.net` 中的网络编程基础。 数据库连接 (JDBC): 学习如何使用 JDBC API 连接到各种关系型数据库,执行 SQL 语句,处理查询结果。讲解连接池的概念和常用实现。 文件操作与序列化: 进一步巩固文件读写操作,并深入理解 Java 的对象序列化(Serialization)机制,包括如何实现 `Serializable` 接口,以及 `transient` 关键字的作用。 网络编程基础: 介绍 Java 的网络编程模型,包括 Socket 编程(TCP/IP 和 UDP),以及 HTTP 协议的基本交互。 常用设计模式: 讲解单例模式、工厂模式、观察者模式、策略模式、装饰器模式、适配器模式等经典设计模式,并结合 Java 代码示例演示其应用。理解设计模式的目的是为了提高代码的可维护性、可扩展性和可重用性。 单元测试: 强调编写单元测试的重要性,并介绍 JUnit 框架的使用,如何编写有效的单元测试用例来保证代码质量。 本书特色 结构清晰,逻辑严谨: 从基础到高级,层层递进,确保读者能够系统性地掌握 Java 知识。 代码示例丰富,贴近实战: 大量精选的、可运行的代码示例,帮助读者将理论知识转化为实践能力。 深入剖析原理: 不仅讲解“怎么做”,更深入探讨“为什么”,帮助读者理解 Java 语言的底层机制。 语言通俗易懂: 避免生僻词汇,力求用最清晰的语言解释最复杂的概念。 覆盖核心主题: 涵盖了 Java 开发者必须掌握的关键技术点。 无论您是准备踏入 Java 开发领域的新手,还是希望巩固和提升现有技能的开发者,《深入理解 Java:从入门到精通》都将是您不可多得的学习伴侣。通过本书的学习,您将能够自信地使用 Java 语言解决实际开发中的各种挑战,为您的职业生涯打下坚实的基础。