声明:笔记仅供参考,不足之处请见谅。

正则表达式能解决什么实际问题?

正则表达式能给你带来超乎你之前想象的文本处理能力。如常见的简单文本替换或查找,虽然普通编辑器的替换或查找能满足一般的需求了,但是如果要处理稍微复杂点的替换或查找操作,那么也许你必须手动处理了。(如替换或查找文本中的所有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)相关推荐

  1. 《Cloud Native Data Center Network》读书笔记-1

    <Cloud Native Data Center Network>读书笔记-1 2019年的一本书,云原生数据中心网络入门书籍,作者 Dinesh G. Dutt 是一家网络公司的首席科 ...

  2. 《Cloud Native Data Center Network》读书笔记-7

    第九章 数据中心边缘 9.1 问题 Clos与外部的连接 为什么需要进行外部连接? 连接到外部世界的带宽需求是什么? 数据中心网络将连接到什么上游设备? 穿越内外部世界的交通需要哪些服务? 9.2 连 ...

  3. 论文阅读——译文: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 ...

  4. Fat-tree:A Scalable, Commodity Data Center Network Architecture 解读

    Fat-tree:A Scalable, Commodity Data Center Network Architecture 解读 title: 一种可扩展的.商品化的数据中心网络体系结构 第一部分 ...

  5. 《Data Algorithm》读书笔记十一— 使用马尔科夫模型的智能邮件营销

    <Data Algorithm>读书笔记十一 - 使用马尔科夫模型的智能邮件营销 1. 智能邮件营销 是什么? 根据顾客的交易历史观测(其实就是推测) "下一个智能邮件营销日期& ...

  6. 《Advanced Data Structures》读书笔记

    1.基础数据结构 1.1.栈 1.2.队列 1.3 双端队列 1.4.动态分配节点 1.5.数组类的"阴影拷贝" 2.搜索树 3.平衡搜索树 4.区间集合 5.堆 6.并查集 7. ...

  7. 最新发布| Jira官宣中国区本地部署特殊政策,公布Data Center价格

    ​Atlassian官方发布Jira Server版停售消息至今已3个月,面对中国区用户的抗议,官方终于于2021年2月2日推出针对性政策,即将DC版准入门槛从500人下调至25人,并于2月5日召开发 ...

  8. 《Python神经网络编程(Make Your Own Neural Network)》读书笔记

    声明 这是作者在CSDN上的第二篇博客,关于阅读塔里克·拉希德的著作<Python神经网络编程(Make Your Own Neural Network)>之后的读书笔记.跟诸位大牛相比, ...

  9. Analyzing Neural Time Series Data 读书笔记6

    Analyzing Neural Time Series Data 第六章读书笔记 仅做学习记录 6 Practicalities of EEG Measurement and Experiment ...

  10. Analyzing Neural Time Series Data 读书笔记3

    Analyzing Neural Time Series Data 第三章读书笔记 仅做学习记录 3 Interpreting and Asking Questions about Time-Freq ...

最新文章

  1. OpenCV查找轮廓
  2. 2012最炙手可热的10项IT技术——相对应的技术书
  3. 视频互动直播软件开发中的连麦问题分析
  4. matlab如何点对点画曲线,MIMOBeamformingExample
  5. getHibernateTemplate()与getSession()的区别
  6. JavaScript基础(一)基本认识
  7. Android SDK镜像的介绍使用【转发】
  8. 数据结构实验二:迷宫的求解
  9. redis 笔记06 发布与订阅、事务、慢查询日志、监视器
  10. spring 注释_Spring @Value注释
  11. 【转】拷贝构造函数的参数类型必须是引用
  12. 【C/C++】成员变量的初始化顺序
  13. NLP --- 隐马尔可夫HMM(极大释似然估计详解)
  14. 女人不需要哲学,因为哲学不能给她们带来面包
  15. 【J2EE规范】什么是JNDI
  16. Protel使用的60个问题和解答
  17. 云服务器带宽如何选择?
  18. 原 sublime text 批量删除空白行
  19. 计算机以及dos窗口常用快捷键
  20. CSS基础学习(二)

热门文章

  1. 通过Visual Studio 2005的项目模板来加速开发过程
  2. 启用新域名:ju690.com --聚了就灵的谐音
  3. 通过docker搭建zabbix监控系统
  4. 服务器监控软件ZABBIX
  5. Lintcode18 Subsets II solution 题解
  6. CentOS7安装bbr的正确姿势:更新到7.3,安装elrepo官方4.9正式版
  7. ActiveMQ简单使用介绍
  8. C语言中volatilekeyword的作用
  9. 在win7下安装SQL sever2005
  10. 从LINQ开始之LINQ to Objects(下)