正则表达式程序员iOS Developer

正则基础与细节回顾

2018-01-18  本文已影响4434人  superxjhw

行的开始和结束


字符组


注意:只在字符组内部且不是第一个元素,连字符才是元字符,否则它就只能普通的连字符号。

排除型字符组


注意:这里的表示排除之意,与之前在字符组外部表示行锚点的不同,这里的^是一个元字符(在字符组内部且紧跟首个方括号之后)。

点符号匹配任意字符


注意:点符号并不是元字符,因为它在字符组内部。在字符组里面和外面,元字符的定义和意义是不一样的,这里的-同样不是连字符,因为它虽然位于字符组内,但是是在首个元素位置。

如果这样写[.-/],那就代表元字符了,用来表示范围,但是这样写明显是错误的用法。

多选结构


注意:gr[e|a]y不符合我们的要求,因为在这里|只是一个普通字符。

在这里,gr[ea]ygr(e|a)y表示的意思一样,不要认为多选结构和字符组一样,一个字符组只能匹配目标文本中的单个字符,但是多选结构自身都可以是完整的正则表达式,都可以匹配任意长度的文本。

还有一点需要注意,就是多选结构和^$一起使用的时候。

忽略大小写


egrep命令中加入-i参数即可,比如我们不对From区分大小写,那总不能这样写[Ff][Rr][Oo][Mm],这样显然繁琐,只需要忽略大小写即可。

单词分界符


小结


我们总结一下到目前为止学到的元字符

元字符 名称 匹配对象
. 逗号 单个任意字符
[···] 字符组 列出的任意字符
[^···] 排除型字符组 未列出的任意字符
^ 脱字符 行的起始位置
$ 美元符 行的结束位置
< 反斜杠-小于 单词的起始位置(某些版本的egrep可能不支持)
\> 反斜杠-大于 单词的结束位置(某些版本的egrep可能不支持)
| 竖线 匹配分隔两边的任意一个表达式
(···) 括号 限制竖线的作用范围,其他功能下文论述

可选元素


其他量词:重复出现


表示重复的元字符总结

-- 次数下限 次数上限 含义
1 可以不出现,也可以只出现一次(单次可选)
* 可以出现无数次,也可以不出现(任意次数均可)
+ 1 可以可以出现无数次,但至少要出现一次(至少一次)

规定重现次数的范围:区间

括号及反向引用


到目前为止,我们见识过括号的两种用途:限制多项式的范围;将如干个字符组合为一个单元,受问号和星号之类量词的作用。现在介绍另外一种用途,反向引用。比如我们匹配重复的单词,使用the the,这样可能还是会匹配到the theory这种,其实使用\<the the\>倒是可以解决这个问题。但是重复单词就不止这一个,穷举显示不现实。于是我们想着匹配所有重复单词,首先匹配一个单词,让后面匹配的单词和先前匹配同样的单词即可。

当然,在一个表达式中我们可以使用多个括号。\1\2\3等来表示第一、第二、第三组括号匹配的文本。括号是按照开括号(从左至右的出现顺序进行的,所以([a-z])([0-9])\1\2中的\1代表[a-z]匹配的内容,而\2代表[0-9]匹配的内容。

另外,该表达式虽然很有用,但是,我们要知道它的局限性,重复的单词第一个位于某行末尾,第二个在下一行的开头,这个表达式就无法找到。

转义


上一篇下一篇

猜你喜欢

热点阅读