原文链接

* 正则表达式入门

1.正则表达式的两种基本用途:搜索和替换。

2.正则表达式是一些用来匹配和处理文本的字符串。

小结:正则表达式是文本处理方面功能最强大的工具之一,正则表达式语言用来构造正则表达式,正则表达式用来完成搜索和替换操作。

* 匹配单个字符

1.匹配纯文本:

文本:Hello , my name is Ben. Please visit my website at http://www.forta.com/ .

正则表达式:Ben

结果:Hello , my name is Ben. Please visit my website at http://www.forta.com/ .

2.匹配任意字符:

“.”元字符可以匹配任何一个单个的字符。

3.匹配特殊字符:

“\”元字符可以对有含义的字符进行转义。

小结:正则表达式经常被简称为模式,它们其实是一些由字符构成的字符串。这些字符可以是普通字符(纯文本)或元字符(特殊含义的字符)。“.”可以匹配任何字符。“\”用来对字符进行转义。

* 匹配一组字符

1.匹配多个字符中的某一个:

“[”和“]”元字符定义一个字符集合。

在使用“[”和“]”定义的字符集合里,这两个字符之间的所有字符都是该集合的组成部分,字符集合的匹配结果是能够与该集合里的任意一个成员相匹配的文本。

2.利用字符集合区间:

正则表达式提供了一个特殊的元字符,字符区间可以用“-”(连字符)来定义。

字符区间:[A-Z]、[a-z]、[A-z]、[A-Za-z0-9]

Ps:区间外为“-”本身,无需转义

3.取非匹配:

“^”元字符表明对一个字符集合进行取非匹配。

取非:[^0-9]:匹配任何不是数字的字符

小结:元字符“[”和“]”用来定义一个字符集合,其含义是必须匹配该集合里的字符之一。定义一个字符集合的具体做法有两种:一是把所有的字符都列举出来;二是利用元字符“-”以字符区间的方式给出。字符集合可以以元字符“^”来求非,这将把给定的字符集强行排除在匹配操作以外,除了该字符集合里的字符,其他字符都可匹配。

* 使用元字符

1.元字符:是在正则表达式里有特殊含义的字符。

元字符分类:  ①匹配文字(例如“.”)

②正则表达式语法要求(例如“[”“]”)

2.匹配空白字符:

元字符

说明

[\b]

回退(并删除)一个字符

\f

换页符

\n

换行符

\r

回车符

\t

制表符 tab键

\v

垂直制表符

3.匹配特定的字符类别:

①匹配数字与非数字(数字元字符)

元字符

说明

\d

任何一个数字字符 = [0-9]

\D

任何一个非数字字符= [^0-9]

②匹配字符与数字 和 非字母与数字

元字符

说明

\w

任何一个字母数字或下划线字符 = [a-zA-Z0-9_]

\W

任何一个非字母数字或非下划线字符 = [^a-zA-Z0-9_]

③匹配空白字符与非空白字符

元字符

说明

\s

任何一个空白字符=[\f\n\r\t\v]

\S

任何一个非空白字符=[^\f\n\r\t\v]

④匹配十六进制或八进制数值

元字符

说明

\x

十六进制\X0A = ASCII(10)=\n

\0

八进制\011 = ASCII(9)=\t

4.使用POSIX字符类

元字符

说明

[:alnum:]

任何一个字母或数字=[a-zA-Z0-9]

[:alpha:]

任何一个字母=[a-zA-Z]

[:blank:]

空格或制表符=[\t  ]

[:cntrl:]

ASCII控制字符

[:digit:]

任何一个数字=[0-9]

[:graph:]

同[:print:],但不含空格

[:lower:]

任何一个小写字母=[a-z]

[:print:]

任何一个可打印的字符

[:punct:]

既不属于[:alnum:]也不属于[:cntrl:]的任何一个字符

[:space:]

任何一个空白字符=[\f\n\r\t\v  ]

[:upper:]

任何一个大写字母=[A-Z]

[:xdigit:]

任何一个十六进制数字=[a-fA-F0-9]

* 重复匹配

1.匹配一个或多个字符:

“+”:匹配一个或多个字符或字符集合,不可匹配0个字符。

Ps:一般来说,当在字符集合里使用“.”“+”这样的元字符时,被看做普通字符,无需转义。

2.匹配零个或多个字符:

“*”:匹配字符连续出现零次或多次的情况。

3.匹配零个或一个字符:

“?”:只能匹配一个字符或字符集合的零次或一次重复。

4.匹配的重复次数:

“{”“}”:在其中给出重复次数。

{数字}:确切的数

{小值,大值}:区间

{小值, }:至少重复“小值”次。

5.防止过度匹配:

贪婪性元字符

懒惰型元字符

*

*?

+

+?

{n,   }

{n,}?

*位置匹配

1.边界限定符:

①单词边界:

元字符

说明

\b

匹配一个单词的开始或结尾

\B

不匹配一个单词边界(例“-”)

\< \>

匹配单词(支持的引擎少)

②字符串边界:

元字符

说明

^

定义字符串的开头

$

定义字符串的结尾

③分行匹配模式:“(?m)”为分行匹配模式,把行分隔符当一个字符串分隔符。

* 使用子表达式(作用一:重复匹配)

1.子表达式必须用“(”和“)”括起来。

2.子表达式的嵌套:

文本:Pinging hog.forta.com [12.159.46.200] with 32 bytes of data:

正则表达式:(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))

结果:Pinging hog.forta.com [12.159.46.200] with 32 bytes of data:

小结:子表达式的作用是把同一个表达式的各个相关部分组合在一起。用“(”“)”来定义。子表达式的常见用途包括:对重复次数元字符的作用对象作出精确的设定和控制、对“|”操作符的OR条件作出准确的定义。

* 回溯引用:前后一致匹配

1.子表达式的另一用途:定义回溯引用。

2.“\1”是一个回溯引用,回溯引用指的是模式的后半部分引用在前半部分中定义的子表达式。

Ps:“\0”用来表示整个正则表达式。

文本:This is a block of of text,several words here are are repeated ,and and they should not be.

正则表达式:[ ]+(\w+)[ ]+\1

结果:This is a block of of text,several words here are are repeated ,and and they should not be.

3.回溯引用在替换操作中的应用:

替换操作需要用到两个正则表达式:搜索模式和替换模式。

文本:Hello , ben@forta.com is my email address.

正则表达式: (\w+[\w\.]*@[\w\.]+\.\w+)

替换:<A HREF = “mailto:$1”>$1</A>

结果:Hello , <A HREF = “mailto:ben@forta.com”> ben@forta.com</A> is my email address.

4.大小写转换:

元字符

说明

\E

结束\L或\U转换

\l(小写L)

把下一个字符转换成小写

\L

把\L到\E之间的字符全部转换成小写

\u

把下一个字符转换成大写

\U

把\U到\E之间的字符全部转换成大写

* 前后查找

1.向前查找:指定了一个必须匹配但不在结果中返回的模式。

从语法上来看,一个向前查找模式其实就是一个以“?=”开头的子表达式,需要匹配的文本跟在“=”的后面。

“匹配和返回文本”:消费

“只匹配不返回”:不消费

向前查找(向后查找)匹配本身其实是有返回结果的,只是这个结果的字节长度永远为0而已。因此,前后查找操作有时也称为零宽度匹配操作。

文本:http://www.forta.com/

     https://mail.forta.com/

ftp://ftp.forta.com/

正则表达式: .+(?=:)

结果:http://www.forta.com/

https://mail.forta.com/

ftp://ftp.forta.com/

2.向后查找:“?<=”元字符。

文本:ABC01:$23.45

HGG42:$5.31

CFMX1:$899.00

XTC99:$69.96

Total items found: 4

正则表达式:(?<=\$)[0-9.]+

结果:ABC01:$23.45

HGG42:$5.31

CFMX1:$899.00

XTC99:$69.96

Total items found: 4

3.对前后查找取非:

元字符

说明

(?=)

正向前查找

(?!)

负向前查找

(?<=)

正向后查找

(?<!)

负向后查找

文本:I paid $30 for 100 apples, 50 oranges, and 60 pears. I saved $5 on this order .

正则表达式:\b(?<!\$)\d+\b

结果:I paid $30 for 100 apples, 50 oranges, and 60 pears. I saved $5 on this order . (匹配数量)

小结:有了向后查找,可以对最终的匹配结果包含且只包含哪些内容作出更精确的控制。前后查找操作可以利用子表达式来指定文本匹配操作的发生位置,并收到只匹配不消费的效果。

* 嵌入条件

1.正则表达式里的条件用“?”来定义。

2.嵌入条件:①根据一个回溯引用来进行条件处理。

②根据一个前后查找来进行条件处理。

3.回溯引用条件:

?(1):检查第一个回溯引用是否存在。

文本:123-456-7890

(123)456-7890

(123)-456-7890

(123-456-7890

1234567890

123 456 7890

正则表达式:(\()?\d{3}(?(1)\)|-)\d{3}-\d{4}

结果:123-456-7890

(123)456-7890

(123)-456-7890

(123-456-7890

1234567890

123 456 7890

4.前后查找条件:  (?(前后查找表达式))

文本:11111

22222

33333-

44444-4444

正则表达式:\d{5}(?(?=-)-\d{4})

结果:11111

22222

33333-

44444-4444

 
 
 
 

re--读书笔记【转】的更多相关文章

  1. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  2. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

  3. 《C#本质论》读书笔记(18)多线程处理

    .NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...

  4. C#温故知新:《C#图解教程》读书笔记系列

    一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...

  5. C#刨根究底:《你必须知道的.NET》读书笔记系列

    一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...

  6. Web高级征程:《大型网站技术架构》读书笔记系列

    一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...

  7. LOMA280保险原理读书笔记

    LOMA是国际金融保险管理学院(Life Office Management Association)的英文简称.国际金融保险管理学院是一个保险和金融服务机构的国际组织,它的创建目的是为了促进信息交流 ...

  8. 《3D Math Primer for Graphics and Game Development》读书笔记2

    <3D Math Primer for Graphics and Game Development>读书笔记2 上一篇得到了"矩阵等价于变换后的基向量"这一结论. 本篇 ...

  9. 《3D Math Primer for Graphics and Game Development》读书笔记1

    <3D Math Primer for Graphics and Game Development>读书笔记1 本文是<3D Math Primer for Graphics and ...

  10. 《More Effective C#》读书笔记

    <More Effective C#>这本书,大概是四年前看完的,但只整理了一部分读书笔记,后面有时间的话,会陆续补充的. More Effective C# :使用泛型 More Eff ...

随机推荐

  1. 《深入理解java虚拟机》笔记(6)内存分配与回收策略

    一.垃圾回收日志说明 [GC[DefNew: 7307K->494K(9216K), 0.0043710 secs] 7307K->6638K(19456K), 0.0044894 sec ...

  2. Could not load file or assembly 'Oracle.ManagedDataAccessDTC.DLL' or one of its dependencies.

    Could not load file or assembly 'Oracle.ManagedDataAccessDTC.DLL' or one of its dependencies.  不是有效的 ...

  3. 洛谷 P1969 积木大赛

    题目描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi. 在搭建开始之前,没有任何积木(可以看成 ...

  4. ECharts3.0介绍、入门

    ECharts 特性介绍 ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,S ...

  5. c# 串口操作

    public class CommPort : IDisposable { public string Port = ""; ///<summary> ///波特率96 ...

  6. 在jquery事件中修改Angular的model

    HTML代码如下 <!DOCTYPE html> <html ng-app="qm"> <body> <input type=" ...

  7. Volley与Picasso的对比

    Volley与Picasso的对比 想写一篇文章来对比一下Volley以及Picasso,有人或许会说了,Volley和Picasso的服务对象都不同,Picasso是专注于图片的下载以及处理,而Vo ...

  8. 删除表中一个字段的SQL语句

    1.删除没有默认值的列:alter table Test drop COLUMN BazaarType 2.删除有默认值的列:先删除约束(默认值)alter table Test DROP CONST ...

  9. 摘自 dd大牛的《背包九讲》

    P01: 01背包问题 题目 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大. 基本思路 这是最 ...

  10. 分类回归树(CART)

    概要 本部分介绍 CART,是一种非常重要的机器学习算法.   基本原理   CART 全称为 Classification And Regression Trees,即分类回归树.顾名思义,该算法既 ...