《精通正则表达式》(第三版)读书笔记及思考 第二章:入门实例拓展(Extended introductory example)

松鼠

2018/7/26

本章主要从应用层面更深入的剖析了正则表达式的强大功能,主要使用Perl作为媒介,然需要注意的是,因流派和对正则的支持程度不同,不同语言的风格也迥然不同。Perl对于正则表达式是弱封装的,不需要函数调用控制,基本符号可以直接附加在正则表达式上,而Java等语言则需要对其有更多的控制。

在Perl中,不需要过分注意字符串和正则表达式的区别,在Java、Python中需要明确区分,否则可能会出现歧义。

以下方法适用或仅适用Perl。

思路为重点研究对象,语言只是载体。

 

  • 使用正则表达式匹配文本

在Perl里,使用 ⌈$a =~ m/……/⌋来检查变量a能否匹配两个斜杠之间的正则表达式,需要注意的事,此条是否匹配返回的是Boolean值而非String值。

 

  • 捕获型括号

(……)中成功匹配的文本会被自动记录下来,按照顺序依次储存在$1, $2……中。之后想反向调用直接调用$1即可。

需要注意的是,如果出现括号嵌套,则以左括号为标准,不想要捕获的括号可使用(?:……)声明此括号不在捕获序列里面。

 

  • 使用正则表达式修改文本

在Perl中,使用⌈$a =~ s/regex/replacement/⌋来检查变量a能否匹配两个斜杠之间的正表达式,若能匹配,则把内容替换。

Perl中使用\b表示单词起始和单词结束。

$a =~ s/regex/replacement/g 表示全局替换,每条喜欢规则对所有行都适用。

 

  • 环视(lookaround)

环视匹配的是位置,而非特定的字符,就像行锚点匹配行的开始,环视匹配的多是某类字符的前面或后面位置。

环视的好处在于更精确的寻找特定位置,如:我们想要匹配Jackson中的Jack,我们就应该使用⌈(?=Jackson)Jack⌋。

简单说明一下:首先尝试匹配Jackson,匹配成功后指针会停留在Jackson的J之前,然后在匹配Jack。

环视按照方向,正反可分为四类:

环视名称:

正则表达式

正则表达式成功条件…

肯定逆序环视

(?<=)

子表达式能够匹配指针左侧文本

肯定顺序环视

(?=)

子表达式能够匹配指针右侧文本

否定顺序环视

(?!)

子表达式不能够匹配指针右侧文本

否定逆序环视

(?<!)

子表达式不能够匹配指针左侧文本

猜你喜欢

转载自blog.csdn.net/qq_40568075/article/details/81215080