《精通正则表达式》读书笔记(1)
声明:笔记仅供参考,不足之处请见谅。
正则表达式能解决什么实际问题?
正则表达式能给你带来超乎你之前想象的文本处理能力。如常见的简单文本替换或查找,虽然普通编辑器的替换或查找能满足一般的需求了,但是如果要处理稍微复杂点的替换或查找操作,那么也许你必须手动处理了。(如替换或查找文本中的所有Email地址)。
一旦掌握了正则表达式,你就会知道它简直是无价之宝,也难以想象如果没有它,这日子该怎么过呢?
正则表达式很神奇,所以很难吗?
如 果没有相关魔术表演的知识,一定觉得魔术真的很神奇;就像对待外语一样,一旦以掌握了它,它不再是天书了。那么正则表达式也是如此,如果你没有正则表达式 相关经验,可能看不懂任何相关正则表达式的意义,但是如果你掌握了它,那情况就不一样了,只要练熟之后,你也可以变魔术了。
以操作系统上的搜索做类比
相信大家都用过自己所用系统上的搜索来寻找文件吧,如果你没用过并不代表你不需要哦,只是时机未到罢了。
相 信绝大多数朋友都是Windows的粉丝,那么该操作系统上启动搜索的快捷键是Win+F,正如一般软件启动搜索对话框的快捷键是ctrl+F,只不过针 对系统的ctrl是Win键而已。在操作系统的搜索使用中就有类似正则表达式的踪影,比如输入*.txt,则表示搜索的是以.txt结尾的文件/文件夹, 此处*是一个特殊字符,代表任意文本,类似的还有?问好,代表任意的单个字符。通过这两个字符,搜索文件的能力大大增强了,但这绝对不是正则表达式,想比 正则表达式,这里的搜索的能力还是很有限的。
正是应这种需求,一种“通用的模式语言”发展了起来,这种功能强大的模式语言和模式本身被称为“正则表达式”(Regular Expression)
以语言作类比
完整的正则表达式由两种字符构成:特殊字符(称为“元字符”,如操作系统中搜索时使用的*,?这种匹配符号,正则表达式的元字符提供了更强大的描述能力)和普通文本字符(就是其他的文字)。
一些元字符等的记录:
完整的正则表达式由两种字符构成:特殊字符(元字符)和普通字符(文字)
正则表达式结构体:[...],即字符组/集,一个字符组智能匹配且必须匹配单个字符,字符组内部的元字符和外部的元字符概念不同,如在内部.?*都不是元字符。
结构体和无结构体的区别:在结构体x[abc]y中,表示的是或的意思,即x然后a或b或c然后y。在无结构体时xabcy表示的是且的意思,x然后a然后b然后c然后y。
在字符组内部的元字符:字符组元字符
-:不在[或[^后面的"-"表示一个范围,必须写着2个字符中间(应该是有间隔的同类字符):[0-9a-z] 0到9和a到z中任意一个。
^:在[后面的"^"表示匹配排除的,写在字符组中的第1个:[^..]与[…] 前者匹配任何未列出来的字符,即列出的是不希望匹配的字符;后者匹配列出来的字符。
PS:一个字符组,即使是排除型字符组,也需要匹配一个字符。如q[^u]无法匹配“Iraq”,因q后面无字符了。
(普通)元字符(非字符组中的元字符,当然有符号相同,但作用不同的):
^:行开头,在字符组内部和外部表示的意义不一样;
$:行结尾;
.:点号,匹配任意字符;
|:或,把不同的子表达式组合成一个总的表达式,从而使总表达式能够匹配任意的子表达式。子表达式称为“多选分支alternative”,一般会用括号来划定多选结构的范围
():括号,划定范围,如多选结构的总表达式一般用括号括起来,与其他不相干字符划分开来。如ga|y和g(a|y)区别是,前者ga或y,后者ga或gy。另外括号一般还能够“记住”它们包含的子表达式匹配的文本,见反向引用。
? + * 这三个元字符统称为量词,即限定了所作用元素的匹配次数。
?:可选项元素,作用于问号前面紧邻的元素,表示是可选项,即有或没有
+:加号作用于前面紧邻的元素,表示能出现一次或多次,即>=1
*:星号作用于前面紧邻的元素,表示能出现任意多次或者不出现,即>=0
{1,2}:区间量词,作用于前面紧邻的元素,限定其出现的次数范围为1-2次
反向引用:容许我们匹配与表达式先前部分匹配的同样的文本,即使用先前匹配的东西来再次匹配。一般通过\1这样的形式表示第一个记忆的匹配文本。
\<:单词的起始位置,这种貌似只在egrep中适用
\>:单词的结束位置,这种貌似只在egrep中适用
^和$
^cat$ 匹配:行开头,然后字母,然后行结尾
^$ 匹配:行开头,然后行结尾,即空行(无任何字符)
^ 匹配:行开头。无任何意义,每一行都有开头
额外的参数:
-i:忽略大小写,这种写法在egrep中适用,其它处一般也是通过i来表示,但是写法不一样
神奇的转义:转义符\,反斜线
如果需要匹配的某个字符本身就是元字符,那么需要对其进行转义,如\?,这个问号就是转义的了,是普通字符了,不是元字符了。(可能某些工具如egrep某些版本不支持在字符组内部使用转义)。PS:在某些用法中,反斜线后面如果跟的不是元字符,那么可能会有特殊的用途,即组合为元字符,即反过来了。
PS:不同语言对正则表达式有不同的改进,因此正则表达式有很多“流派”。
转载于:https://www.cnblogs.com/yevon/archive/2013/03/11/2935048.html
《精通正则表达式》读书笔记(1)相关推荐
- 《Cloud Native Data Center Network》读书笔记-1
<Cloud Native Data Center Network>读书笔记-1 2019年的一本书,云原生数据中心网络入门书籍,作者 Dinesh G. Dutt 是一家网络公司的首席科 ...
- 《Cloud Native Data Center Network》读书笔记-7
第九章 数据中心边缘 9.1 问题 Clos与外部的连接 为什么需要进行外部连接? 连接到外部世界的带宽需求是什么? 数据中心网络将连接到什么上游设备? 穿越内外部世界的交通需要哪些服务? 9.2 连 ...
- 论文阅读——译文:PortLand:A Scalable Fault-Tolerant Layer 2 Data Center Network Fabric
论文标题:PortLand:A Scalable Fault-Tolerant Layer 2 Data Center Network Fabric 会议:sigcom 09 Ref:Radhika ...
- Fat-tree:A Scalable, Commodity Data Center Network Architecture 解读
Fat-tree:A Scalable, Commodity Data Center Network Architecture 解读 title: 一种可扩展的.商品化的数据中心网络体系结构 第一部分 ...
- 《Data Algorithm》读书笔记十一— 使用马尔科夫模型的智能邮件营销
<Data Algorithm>读书笔记十一 - 使用马尔科夫模型的智能邮件营销 1. 智能邮件营销 是什么? 根据顾客的交易历史观测(其实就是推测) "下一个智能邮件营销日期& ...
- 《Advanced Data Structures》读书笔记
1.基础数据结构 1.1.栈 1.2.队列 1.3 双端队列 1.4.动态分配节点 1.5.数组类的"阴影拷贝" 2.搜索树 3.平衡搜索树 4.区间集合 5.堆 6.并查集 7. ...
- 最新发布| Jira官宣中国区本地部署特殊政策,公布Data Center价格
Atlassian官方发布Jira Server版停售消息至今已3个月,面对中国区用户的抗议,官方终于于2021年2月2日推出针对性政策,即将DC版准入门槛从500人下调至25人,并于2月5日召开发 ...
- 《Python神经网络编程(Make Your Own Neural Network)》读书笔记
声明 这是作者在CSDN上的第二篇博客,关于阅读塔里克·拉希德的著作<Python神经网络编程(Make Your Own Neural Network)>之后的读书笔记.跟诸位大牛相比, ...
- Analyzing Neural Time Series Data 读书笔记6
Analyzing Neural Time Series Data 第六章读书笔记 仅做学习记录 6 Practicalities of EEG Measurement and Experiment ...
- Analyzing Neural Time Series Data 读书笔记3
Analyzing Neural Time Series Data 第三章读书笔记 仅做学习记录 3 Interpreting and Asking Questions about Time-Freq ...
最新文章
- OpenCV查找轮廓
- 2012最炙手可热的10项IT技术——相对应的技术书
- 视频互动直播软件开发中的连麦问题分析
- matlab如何点对点画曲线,MIMOBeamformingExample
- getHibernateTemplate()与getSession()的区别
- JavaScript基础(一)基本认识
- Android SDK镜像的介绍使用【转发】
- 数据结构实验二:迷宫的求解
- redis 笔记06 发布与订阅、事务、慢查询日志、监视器
- spring 注释_Spring @Value注释
- 【转】拷贝构造函数的参数类型必须是引用
- 【C/C++】成员变量的初始化顺序
- NLP --- 隐马尔可夫HMM(极大释似然估计详解)
- 女人不需要哲学,因为哲学不能给她们带来面包
- 【J2EE规范】什么是JNDI
- Protel使用的60个问题和解答
- 云服务器带宽如何选择?
- 原	 sublime text 批量删除空白行
- 计算机以及dos窗口常用快捷键
- CSS基础学习(二)