1.肯定断言:必须匹配一个字符

排除型字符组:匹配未列出字符的字符组

2.范围表示法——列出范围内所有的字符 大多数情况下,不会影响执行速度。但是,某些实现方式不能完全优化字符组。所以,最好是有范围表示法,有可能速度更快。 [a-Z],可能存在遗漏;[a-zA-Z],可以匹配所有字母。

3.点号:在某些软件中,可以匹配任何字符;在其他软件中,匹配处理换行符之外的任何字符。 .* :通常情况下,不能匹配换行符; [^"]* :替代

4.字符组减法:在字符组中进行减法运算,.NET提供 [a-a]-[aeiou]:[a-z]能够匹配字符的减去[aeiou]能够匹配的字符

5.锚点、"零长短断言":不会匹配实际的文本,而是寻找文本中的位置

6.环视:大多实现方式,都限制了逆序环视中的表达式的长度,但是顺序环视则没有限制。有些软件支持逆序环视匹配任意长度的文本,但是可能带来严重的效率问题 逆序环视:只能匹配固定长度的文本。

?<!\w :ok ; ?<!this|that :ok; ?<!books? :wrong,匹配文本不确定,改为 (?<!book)(?<!books) :ok;

?<^\w+: :wrong;匹配文本不确定

7、命名捕获:为捕获的内容命名 \b(?\d\d\d\)- (?\d\d\d)- (?\d\d\d\d)\b : 可以通过 RegexObj.Groups["Area"]来访问括号捕获的内容,

8、某些时候正则表达式处理各种极端情形会降低收益/成本的比例。

某些情况下,更适合的做法就是不依赖正则表达式完成全部的工作。用括号将每个字段括起来$1、$2、$3用其他程序验证。

正则表达式不总是最优解,多数程序设计语言都提供了处理文件名的费正则表达式函数。

9、设置锚点,可以提高正则效率。

10、嵌套:正则表达式无法匹配任意深度的嵌套结构。但可以匹配特定深度的嵌套括号,不是任意深度的嵌套括号   \[^()*(\([^()]*\)[^()]*\)]  可以匹配  val=foo(bar(this),3.7)+2*(that-1);

11、注意,没有匹配任何必须元素,导致任何字符都可以匹配成功   -?[0-9]*\.?[0-9]*

12、占有优先量词或固化分组,可以禁止引擎回溯到可能出问题的地方。

ip地址正则匹配:^([01]?\d\d?|2[0-4]\d|25[0-5]\.)([01]?\d\d?|2[0-4]\d|25[0-5]\.){2}([01]?\d\d?|2[0-4]\d|25[0-5]$)

注意 \d\d? 比\d?\d 效率更高

所在路径和文件名:^(.*)/[^/]*$  优于  ^(.*)/(.*)$  更加明确的表达了意图。提醒8.

匹配引号内的字符: "(\\.|[^\\"])*"   或"(?>(\\.|[^"])*")   或"(\\.|[^"]*+")        \\.  :可以包括转义字符    ;    固化分组、占有优先量词:可以禁止引擎回溯到可能出问题的地方

精通正则表达式(第三版)—Mastering Regular Expressions,3rd Edition—读书笔记2的更多相关文章

  1. 精通正则表达式(第三版)——Mastering Regular Expressions,3rd Edition——读书笔记1

    基础知识介绍: 子表达式匹配 环视 引号内的字符串:"(^")*" 12小时制:(1[0123]|[1-9]):[0-5][0-9]*(am|pm) 24小时制:(([0 ...

  2. Java 线程第三版 第九章 Thread调度 读书笔记

    一.Thread调度的概述 import java.util.*; import java.text.*; public class Task implements Runnable { long n ...

  3. Java 线程第三版 第四章 Thread Notification 读书笔记

    一.等待与通知 public final void wait() throws InterruptedException      等待条件的发生. public final void wait(lo ...

  4. 转载:邮箱正则表达式Comparing E-mail Address Validating Regular Expressions

    Comparing E-mail Address Validating Regular Expressions Updated: 2/3/2012 Summary This page compares ...

  5. [笔记] 精通正则表达式/Mastering Regular Expressions

    / 匹配<emphasis>这个tag标注的IP地址的RE:‘<emphasis>([0-9]+(\.[0-9]+){3})</emphasis>' / 锚定--a ...

  6. Javascript模式(第三章字面量与构造函数)------读书笔记

    一 对象字面量 1.1对象字面量的语法 1,对象键值对哈希表,在其他的编程语言中称之为“关联数组”, 2 键值对里面的值,可以是原始类型也可以是其他类型的对象,称之为属性,函数称之为方法 3 自定义对 ...

  7. 《Visual C# 从入门到精通》第一章使用变量、操作符和表达式——读书笔记

    前言: 这个笔记是我个人总结,主要是熟练自己查看<Visual C# 从入门到精通>(第8版)这本书时,懵然起总结的想法,只是总结一些知识点,在工作项目会用得上,但是对毫无C#语言基础的, ...

  8. < 利用Python进行数据分析 - 第2版 > 第五章 pandas入门 读书笔记

    <利用Python进行数据分析·第2版>第五章 pandas入门--基础对象.操作.规则 python引用.浅拷贝.深拷贝 / 视图.副本 视图=引用 副本=浅拷贝/深拷贝 浅拷贝/深拷贝 ...

  9. Regular Expressions --正则表达式官方教程

    http://docs.oracle.com/javase/tutorial/essential/regex/index.html This lesson explains how to use th ...

随机推荐

  1. c# Applicatcontext类

    Application类(位于System.Windows.Forms命名空间)公开了Run方法,可以调用该方法来调度应用程序进入消息循环.Run方法有三个重载 1.第一个重载版本不带任何参数,比较少 ...

  2. golang学习笔记18 用go语言编写移动端sdk和app开发gomobile

    golang学习笔记18 用go语言编写移动端sdk和app开发gomobile gomobile的使用-用go语言编写移动端sdk和app开发https://blog.csdn.net/u01249 ...

  3. Anaconda下载及安装及查看安装的Python库用法

    Anaconda下载及安装及查看安装的Python库用法 Anaconda 是一个用于科学计算的 Python 发行版,提供了包管理与环境管理的功能.Anaconda 利用 conda 来进行 pac ...

  4. 【JavaScript 6连载】五、继承的概念

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  5. Chrome表单自动填充如何取消(暂时可行的解决办法)

    做项目时一直遇到一个问题,那就是用chrome测试的时候页面上的表单一直会自动填充,并且伴有黄色的背景颜色,有时候感觉很方便,有时候又很想去掉. 之前也多次寻找过方法,但是网上的方法都差不多,很多都是 ...

  6. 关于mapreducer 读取hbase数据 存入mysql的实现过程

    mapreducer编程模型是一种八股文的代码逻辑,就以用户行为分析求流存率的作为例子 1.map端来说:必须继承hadoop规定好的mapper类:在读取hbase数据时,已经有现成的接口 Tabl ...

  7. Python笔记 #19# 实现bpnn

    代码编辑&解释工具:Jupyter Notebook 快速入门 形象说明BP神经网络的用法(图片来自推特): Bpnn类最主要的三个方法: initialize方法,用于设定神经网络的层数.各 ...

  8. nginx的gzip压缩功能

    我们在开发网站的时候,应该要考虑到pv,因为pv比较大可能会造成服务器带宽不够用,进而导致用户体验变差. 这个时候我们就可以考虑用nginx的gzip功能. 在nginx中开启gzip压缩功能很简单, ...

  9. Prometheus监控学习笔记之PromQL 内置函数

    概述 Prometheus 提供了其它大量的内置函数,可以对时序数据进行丰富的处理.某些函数有默认的参数,例如:year(v=vector(time()) instant-vector).其中参数 v ...

  10. php+redis,延迟任务 实现自动取消订单,自动完成订单

    简单定时任务解决方案:使用redis的keyspace notifications(键失效后通知事件) 需要注意此功能是在redis 2.8版本以后推出的,因此你服务器上的reids最少要是2.8版本 ...