《正则表达式必知必会》读书笔记

* 正则表达式入门

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 , [email protected] is my email address.

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

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

结果:Hello , <A HREF = “mailto:[email protected]”> [email protected]</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

时间: 2024-11-02 03:16:14

《正则表达式必知必会》读书笔记的相关文章

码农的产品思维培养第一节(人人都是产品经理读书笔记)

在前段时间,密集的推出Android学习记录之后,我觉得接下来的Android开发进入了一个精进演变的过程,革命性的东西略缺.每日更新特别新的东西也违背认知规律.所以以后关于Android方面的知识,碰到什么,然后记录什么. 而今天,在前一篇日志里面,我描述了我为什么要去理解"产品经理",从这一节开始,我要实施我的计划.所以,和Android记录一样,我要记录这个过程.对自己是一个回归总结吸收的过程,同时也希望能够帮助到更多的朋友,如果你也心存学习进取之心,如果你也如我一般疑惑未解心不

人人都是产品经理读书笔记(四)

补充:

《启示录:打造用户喜爱的产品》—— 读书笔记

这是一本非常不错的书,即使你可能只是一名开发工程师,也会有意想不到的收获! 如果你是一名产品经理,那就更不能错过了!不要留下遗憾! 这真的是一本很好的书,读每一遍都会有不同的收获,绝对让你震撼!我是会再读一遍或者N多遍的, 而能把这些内容转应用到实际中的人才是真正的高手,细细体会,在工作中好像已经有人在用了!惊讶!得抓紧时间了! 通过这本书,你将会知道一个合格的产品经理应该做什么,怎么做 本书主要讲解三个方面:人员.流程.产品 人员:产品从开始到完成过程中所有的参与者 流程:产品在开发过程中的所

产品经理学习笔记(二)------产品经理的工作职责(下)

二.产品经理的工作职责(下) 4.产品宣讲 ---宣讲对象:客服.市场.销售.运营.其他(开发进度到50%) ---宣讲目的:内部培训.获得认可 ---宣讲方式:内部推荐会(预测.演示.试用).注意控制(氛围.引导) ---宣讲目标:获得认可.帮助其他团队更好理解产品.协助其他团队更好开展工作 5.市场推广 ---对产品资料进行内容把关:网站.移动应用.印刷品等 ---主要针对:市场.公关.运营.销售 6.产品推出后的管理与迭代 ---运营数据的整理分析 ---深入一线体验产品 ---关注用户需

产品经理--读书静心的日子

入行教育,做教育产品工作,需要不断的进步. 一.了解产品开发.项目管理经验. 二.教育基础理论及相关知识. 小学阶段 (2016.2017不断的翻阅,有新的体会) 中学阶段(2018主攻方向)

谷歌和亚马逊如何做产品(读书笔记)

《产品经理》读书笔记

自从鼠标手犯病后,就刻意减少使用电脑的时间并且加强运动,目前已经完全康复,但是还是需要注意.因此更新博客的频率大大降低,但是也有时间多看看书,学习学习了! 最近看了<yes,产品经理>上下册,作者 汤圆 老马,文笔诙谐,把管理知识融入工作日常内容,浅显易懂,对于非管理专业的门外汉,还是不错的读物! 下面是摘抄的部分主要内容,个人认为比较有用的就记录下来. ------------------------------------------------ 制定产品价格策略的6步: 确定企业目标 冲

产品经理的那些事第一章读书笔记

1.一个产品经理的信仰:好产品能改变世界. 2.为什么要做产品经理:因为热爱,改变世界的方法有很多,技术可以改变世界,好的产品也可以,当然还有其他,但我热爱产品,一件事只有热爱了,才能持续不断的去做好,所以我选择了产品经理这条路. 3.产品是什么:产品是用来解决某个问题的东西. 4.产品经理为何而设:想要更了解产品与它面临的竞争情况,最终目的是要满足顾客的需求. 5.产品经理概念的进化: 分析: 1)行业形态不同:成熟行业vs.新兴行业 ①传统行业 概况:经过几十年乃至上百年的摸爬滚打,市场已经

【读书笔记】产品经理要做的事

文章链接:http://www.chanpin100.com/archives/44223 作为一个产品经理,不能只画图:产品经理更像是一个纽带,连接着各个环节,保持项目的正常运行. 在开始要做一个产品的时候,不能上来就画图,也不能告诉你需求就开始画图.应该先对需求进行筛选和挖掘:把伪需求去掉,挖掘出潜在需求. 1.分析产品的步骤:目标人群.使用场景.业务核心. 2.在团队中担任掌舵人,有目的的引导团队:激发团队灵感可以使用商业画布:客户分布.价值主张.渠道通路.客户关系.收入来源.核心资源.关

【读书笔记】神一样的产品经理(一)

 第一篇 产品经理 1.产品经理诞生的背景和价值 *很多入门级书里都会提到这一部分,本书讲了保洁诞生的第一个产品经理的故事. 2.很牛的产品经理(例子是乔布斯.郭靖) 1)几个重要特性:*影响力 *核心需求把控力 *创新力 *痴情力 2)产品经理的职责: *明确产品的目标用户群及其特征*获取.评估和管理用户需求*完成产品需求文档.产品原型和流程图*精通用户体验.交互设计和信息架构技能*项目管理.需求变更管理和需求验收*产品运营数据的分析和总结*提供运营.市场和销售等支撑 3)产品经理常犯的错误