编程语言
首页 > 编程语言> > 开发日记-20190709 关键词 读书笔记 《Perl语言入门》Day 6

开发日记-20190709 关键词 读书笔记 《Perl语言入门》Day 6

作者:互联网

Preface


Content

什么是正则表达式?

正则表达式(regular expression),在Perl里面通常也叫做模式(pattern),是用来表示匹配(或不匹配)某个字符串的特征模板。也就是说,虽然有无线多可能的文本字符串存在,但只要用一个模式就可以将它们干净利落地分成两组:匹配和不匹配的。模式绝对没有仁慈,写意之类的性格,它要么匹配,要么不匹配。

模式可能只匹配一个给定的字符,或者两个,三个,十个,上百个,甚至无数个字符。当然模式也可以匹配所有除了给定的一个,多个或者无限多个字符以外的内容。前面说了,正则表达式是一种小程序,它拥有自己的简单编程语言。其实这个程序的任务很简单:查看一个字符串,然后判定它“匹配”或“不匹配”。这就是它所做的全部工作。

不要把正则表达式和shell的“文件名匹配模式”(又成为glob,文件名通配)混为一谈。在Unix shell键入*.pm来匹配,所有以.pm结尾的文件就是典型的文件名通配。上面的例子使用了chapter*.txt这样的文件名通配(你已经注意到了,必须用单引号将正则表达式括起来,不然会被shell当成文件名通配)。文件名通配使用了许多与正则表达式相同的字符,但这些字符在使用方式上完全不同。

Unicode属性
Unicode字符能够理解自身含义,他们不只是简单的字节序列。每个字符除了字节组合之外,还附带着属性信息。所以除了匹配字符本身之外,我们还能根据字符的属性来达成匹配。

关于元字符
点号(.)是能够匹配任意一个字符的通配符,当然换行符(也就是"\n")要除外。因此,betty将会被/bet.y/这个模式匹配。

点号只能用来匹配一个字符。

在任何元字符前面加上反斜线,就会使他失去元字符的特殊作用。

因此,反斜线是我们的第二个元字符。若要匹配真正的反斜线,请用两个反斜线表示。

简单的量词

我们常常需要在某个模式中重复某些东西。而星号(**)正是用来匹配前面的条目零次或多次的。

.*会匹配任意字符零次到无限多次。

+也是量词,加好会匹配前一个条目一次以上:/fred+barney/会匹配在fred与barney之间用空格隔开而且只用空格隔开的字符串(空格不是元字符)。

?与星号及加号类似,但限制更为严格,表示前一个条目是可有可无的。也就是说,它的前一个条目可以出现一次或者不出现。

模式分组

在正则表达式中,圆括号或者说小括号的作用是对字符串分组。

圆括号同时也使得重新使用某些字符串成为可能。我们可以用反向引用(back reference)来引用圆括号中的模式所匹配的文字,这个行为我们称为捕获组(capture group)。反向引用的写法是在反斜线后面接上数字符号。

反义简写

有时候你也许只是为了指定以上集中简写意外的字符,也就是类似于[\d],[\w]或是[^\s]
这样的模式,来表示一个非数字字符,非单词字符或者非空白字符。为此,我们引入了他们的大写版本来表示否定意义,即:\D,\W或者\S。这些大写版本能匹配相应小写版本范围以外的字符。

这些简写既可以作为模式里独立的字符集,也可以作为方括号里字符集的一部分。也就是说,/[\dA-Fa-f]+/可以用来匹配十六进制数字,因为十六进制表示法用的是字符ABCDEF(或小写)作为额外数字。


Daily Task

终有一天,你会老去,而我,将会加冕为王!

标签:字符,匹配,读书笔记,正则表达式,20190709,模式,通配,Day,元字符
来源: https://blog.csdn.net/qq_31433709/article/details/95234686