《精通正则表达式》(第三版)读书笔记及思考 第一章:正则表达式入门(Introduction to regex)

松鼠

2018/7/23

从今天起开始正则表达式的学习,凭此系列博客作为读书笔记和心得记录,一些思考和想法也会笔耕于此。

 

第一章:正则表达式入门(Introduction to regex)

首先需要理解这玩意是干啥的,为啥我们要学这玩意。学编程是避不开字符串的各种杂七杂八的处理的,说到底程序还是字符串堆砌,无论是搞爬虫是我们需要定向检索某一类的资源,或是数据库对各种信息的处理,亦或是最单纯的提取我们需要的各类文字、数字,我们总是希望使用某种方式直接获得我们想要的东西,跟其他方法比起来,正则有得天独厚的优势,具体细节暂且不表。

 

  • 正则语句组成结构

完整的正则表达式由元字符(metacharacters)和普通文本字符(normal text characters)组成,简单来说,元字符就是语法功能,普通文本字符就是文本,元字符对文本的操作控制是以一个单元(unit)为基础的,元字符会对整个单元起作用。

 

  • 元字符种类

脱字符号 ⌈^⌋:表示匹配行的起始,如 ⌈^cat⌋ 表示行起始后的第一个字符是 ⌈c⌋,然后是 ⌈a⌋,然后是⌈t⌋。

美元符号 ⌈$⌋:表示匹配行的结束,如⌈t$⌋表示行的结束之前的最后一个字符是⌈t⌋。

以上两种符号的特殊之处在于他们匹配的是位置,而不是具体的文本。

 

  • 字符组 (character classes)

字符组[……]可以理解为一个“或运算”,字符组中的字符有且仅有一个字符可以匹配,如⌈ca[rt]⌋能匹配且仅能匹配⌈car⌋或⌈cat⌋。字符组元字符(character-class metacharacter)是仅在字符组中适用的元字符,连字符‘-’就是典型的例子,在字符组中表示范围,如⌈[0-9]⌋、⌈[a-z]⌋,需要注意的是:‘-’在字符组内部中时才是元字符,而且前后必须是合法范围,如⌈[-az]⌋表示⌈-⌋或⌈a⌋或⌈z⌋,一定要注意逻辑上是否存在谬误。‘-’在字符组外部就是一个普通文本字符,不可混淆。

排除型字符组:⌈[^……]⌋表示一个“或非”操作,如⌈[^0-9]⌋表示匹配一个非0到9的字符,需要注意的是:排除型字符组一定会有一个匹配,匹配不到是不可接受的,⌈^⌋只有在字符组内部才是元字符,在外部是行锚点(line anchor)。

 

  • 点号⌈.⌋

点号可以匹配任意字符,这里包括空格,需要强调空格符也是一个字符。点号的匹配范围过于宽泛,可能会获得大量希望之外的结果,需要多加限制。

 

  • 多选结构(alternation)

⌈|⌋,或运算,跟括号配合,可以起到比字符组更灵活的筛选功能,字符组只能对字符或运算,⌈|⌋可以筛选子表达式,一个二级结构出现了。⌈(|)⌋是一个常见的结构。

 

  • egrep中的 -i 命令可以忽略大小写。

 

  • 单词标识符

为了避免希望匹配的单词在另一个单词里面,可采用⌈\<⌋,⌈\>⌋定位单词开始结束位置。⌈\<⌋是一个元字符序列。

 

  • 可选项元素-量词(?+*)

⌈?⌋表示其作用的的单元可出现一次可以不出现,如⌈colou?r⌋表示u可有可无,⌈color⌋,⌈colour⌋均可匹配成功。

⌈+⌋表示其作用的的单元至少出现一次,如⌈[0-9]+⌋可匹配所有数字。若一次都没有匹配成功就会报错。

⌈*⌋表示其作用的单元爱出现几次都行,0到任意大都是可以的,也不会报错。

有时用{min,max}可规定确切匹配的区间。

 

  • 括号和反向引用

大部分情况下括号可以记住其内部子表达式的匹配内容,我们可以通过⌈\1⌋反向调用,⌈\2⌋,⌈\3⌋依次匹配后面的括号内容。

此方法多用于寻找重复字符。

 

  • 转义

⌈\⌋转义符,加元字符可以消除元字符本身的特性,恢复其普通的含义,反之⌈\⌋加普通字符可能产生元字符的特性。

 

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_40568075/article/details/81162996
今日推荐