精通正则表达式(第三版)—Mastering Regular Expressions,3rd Edition—读书笔记2
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的更多相关文章
- 精通正则表达式(第三版)——Mastering Regular Expressions,3rd Edition——读书笔记1
基础知识介绍: 子表达式匹配 环视 引号内的字符串:"(^")*" 12小时制:(1[0123]|[1-9]):[0-5][0-9]*(am|pm) 24小时制:(([0 ...
- Java 线程第三版 第九章 Thread调度 读书笔记
一.Thread调度的概述 import java.util.*; import java.text.*; public class Task implements Runnable { long n ...
- Java 线程第三版 第四章 Thread Notification 读书笔记
一.等待与通知 public final void wait() throws InterruptedException 等待条件的发生. public final void wait(lo ...
- 转载:邮箱正则表达式Comparing E-mail Address Validating Regular Expressions
Comparing E-mail Address Validating Regular Expressions Updated: 2/3/2012 Summary This page compares ...
- [笔记] 精通正则表达式/Mastering Regular Expressions
/ 匹配<emphasis>这个tag标注的IP地址的RE:‘<emphasis>([0-9]+(\.[0-9]+){3})</emphasis>' / 锚定--a ...
- Javascript模式(第三章字面量与构造函数)------读书笔记
一 对象字面量 1.1对象字面量的语法 1,对象键值对哈希表,在其他的编程语言中称之为“关联数组”, 2 键值对里面的值,可以是原始类型也可以是其他类型的对象,称之为属性,函数称之为方法 3 自定义对 ...
- 《Visual C# 从入门到精通》第一章使用变量、操作符和表达式——读书笔记
前言: 这个笔记是我个人总结,主要是熟练自己查看<Visual C# 从入门到精通>(第8版)这本书时,懵然起总结的想法,只是总结一些知识点,在工作项目会用得上,但是对毫无C#语言基础的, ...
- < 利用Python进行数据分析 - 第2版 > 第五章 pandas入门 读书笔记
<利用Python进行数据分析·第2版>第五章 pandas入门--基础对象.操作.规则 python引用.浅拷贝.深拷贝 / 视图.副本 视图=引用 副本=浅拷贝/深拷贝 浅拷贝/深拷贝 ...
- Regular Expressions --正则表达式官方教程
http://docs.oracle.com/javase/tutorial/essential/regex/index.html This lesson explains how to use th ...
随机推荐
- ubuntu14.04 cpu-ssd
1. ssd-caffe部署 五年半前老笔记本,没有GPU(其实有,AMD的,不能装CUDA),之前装过CPU版的Caffe 新建一个目录,然后参考网上步骤 sudo git clone https: ...
- JustOj 1486: Hello, world!
题目描述 This is the first problem for test. Since all we know the ASCII code, your job is simple: Input ...
- Java学习路线教程之JDBC基本操作
为了帮助大家熟练应用JDBC编程,接下来,在本节将通过一个综合案例来讲解JDBC的基本操作,确保大家能够深刻理解JDBC的增.删.改.查,灵活利用JDBC完成对数据库的各项操作. 1. 创建一个Jav ...
- SQL Server 2008 R2 常用系统函数学习
/******************************************* * 聚合函数 *******************************************/ SEL ...
- win10系统jdk安装和环境变量配置
新换电脑的原因,要重新安装jdk,完整记录一下安装过程 jdk版本用的1.7(公司默认版本) 这是jdk安装目录 更改为D:\jdk\java\jdk1.7 安装jre目录 更改为D:\jdk\ ...
- 登陆 全站 user
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join( ...
- 小程序 canvas实现图片预览,图片保存
wxml 代码: <view class="result-page"> <canvas bindtap="previewImage" canv ...
- 05: greenlet:轻量级的并发编程
网络编程其他篇 1.1 greenlet简介 1.greenlet原理 & 使用 1. greenle间切换 1)一个 “greenlet” 是一个很小的独立微线程,可以把它想像成一个堆栈帧, ...
- 关于centos7字体缺失导致项目验证码丢失报错500问题
这个问题是这样的,迁移架构的时候项目验证码刷不出来, 页面报错500, 就像下面那样. tomcat报错是数组越界, 看下面 最诡异的是, 开发那边再三确定代码里面没有问题, 于是我试了一下把war包 ...
- Codeforces 832E Vasya and Shifts - 高斯消元
题目传送门 快速的传送门I 快速的传送门II 题目大意 (题意比较复杂,请自行阅读原题) 可以将原题的字母都看成它们的在字符表中的下标,这样问题就变成给定$n$个$m$维向量$\vec{a_{1}}, ...