第七章 漫游正则表达式王国
正则表达式是perl内嵌的,自成一体的微型编程语言。
也会出现在sed、grep、awk中。
1、什么是正则表达式
在perl中通常也叫模式,是用来表示匹配(或不匹配)某个字符串的特征模板;
简单来说,正则表达式就是查看一个字符串,然后看它匹配还是不匹配;
另一个用到正则表达式的就是linux中的grep命令;
不要把正则表达式和shell中的文件名匹配模式混为一谈,(必须用单引号将正则表达式括起来,不然会被当做shell当做文件名通配)
2、使用简单模式
如果模式匹配的对象是$_的内容,只要把模式写在一对斜线里面就行了,而模式本身就是一串简单的字符序列。
模式匹配通常会用来返回真值或者假值,所以往往会在if或者while的条件表达式里面。
3、unicode属性
例,许多字符属于空白符,属性名为space,使用\p {space}
如果匹配数字,那么就用digit属性。
4、关于元字符
如果模式只能匹配简单的直接量字符串,那实际没有太大用处,所以引入特殊字符,成为元字符。
例如:. 是能匹配任意一个字符的通配符。换行符除外,
在任何元字符前面加上反斜线,就会失去元字符的特殊作用。
因此,反斜线是第二个元字符。
5、简单的量词
在某个模式中重复某些东西:星号(*)正是用来匹配前面的条目零次或多次。
使用点号(.)可以匹配任意字符
使用(.*)会匹配到任意字符零次或无限多次。(戏称“捡破烂”模式,因为它能匹配到字符串中的任何东西)
第一个量词:星号是一种量词,其指定了前一个条目的数量;
第二个量词:除此之外,加号(+)也是一种量词,其会匹配前一个条目一次以上,/fred+barney/会匹配再其之间用空格隔开而且只能用空格隔开的字符串。加号表示在这个之间必须有一个以上的空格。
第三个量词:?表示前一个条目可有可无,意思是前一个条目出现一次或者压根不出现。
6、模式分组
在正则表达式中,圆括号作用是对字符串分组,圆括号也是元字符:例如,/fred+/会匹配fredddddd这样的字符,不会是自己想要的,那么/(fred)+/会匹配到fredfredfred这种字符,/(fred)*/这种会匹配到hello,world这种字符。