1.用m// m{} m()m m[] m,, m!! m^^ 等进行匹配
注意:选择模式中不会出现的字符作为定界符
2.模式匹配修饰符(也称标识、副词)
/i进行大小写无关的匹配
/s将点号(.)进一步扩展,能匹配任意字符,包括换行符
/x可以在模式中加入空格,看起来更清楚,但原先的空格和制表符失效,不过\以及\t以及\s可以弥补。此外,还多了分行注释的功能(#)。
修饰符可以搭配使用,如/isx
/m对每一行都进行匹配
3.锚位(在字符串的指定位置匹配)
\A字符串的绝对开头
\z字符串的绝对结尾
\Z行末锚位,允许后面出现换行符
/\A\s*\Z/匹配一个空行
/fred$/m匹配fred以及后面的换行符或者绝对末尾
/^barney/m匹配换行符后面的或者绝对开头
没有m则^与$同于\A与\z
4.单词边界锚位
\b,能匹配任何单词的首尾;/\bfred\b/称为整词匹配
这里的单词是指一连串英文字母、数字与下划线的组合,即/\w+/
非单词边界锚位\B,匹配\b不能匹配的的位置
5.绑定操作符=~
拿右边的模式来匹配左边的字符串,如$some_other=~/\brub/
6.快速消费型代码
读取输入行、匹配字符串和模式、舍弃输入行的内容
Print “Do you like Perl?”;
my$likes_perl==~/\byes\b/i;#绑定操作符的优先级相当高;\byes应该是布尔匹配
if ($likes_perl){
print “…………\n”;
}
7.模式中的内插,即在模式中可以进行双引号形式的内插,如/\A($what)/
8.捕获变量,如$1、$2、$3、$4等
$4指代的是模式中第4对括号所匹配的字符串内容,该内容与反向引用\4表示的内容一样,但它们是两个事物。
$_=“hellothere, neighbor”;
if(/(\S+)(\S+), (\S+)/){
print “words were $1 $2 $3\n”;
}
9.不捕获模式
即使用圆括号只是为了分组,而不进行捕获。在左括号后面加上?:
注意:只是不捕获,该匹配的还是得匹配,如/(?:bronto)?saurus (steakburger)/,而捕获变量可以用$1表示。
10.命名捕获
对捕获内容直接命名,具体写法:(?PATTERN),如:
Use 5.010;
My $names =‘Fred or Barney’;
If($names=~m/(?\w+) (?:andor) (?\w+)/){
Say “I Saw $+ and $+”;
}
反向引用的写法也改变了:\g
11.自动捕获变量
字符串中实际匹配模式的部分存储进$&
匹配区段之前的内容存进$`
匹配区段之后的内容存进$’
这三个免费的捕获变量,不加捕获圆括号也能使用。如:
If(“hellothere, neighbor”=~/\s(\w+),/){
Print “this was ($`)($&)($’).\n”;
}——三个自动捕获变量的实际用途
12.通用量词
/a/表示匹配重复出现5次至15次的a
/(fred)/表示匹配出现3次以上的fred
先前讲到的*,+,?也可以用通用量词来表示,它们最常用,所以简化出来。
13.正则表达式的优先级
14.模式测试程序
#! /usr/bin/perl
While(){
Chomp;
If(/PATTERN/){
Print “matched: $`$’\n”;
}else{
Print “no matched: $_\n”;
}
}
这几日看《围城》花了一些时间,此外,和别人聊天也花了许多时间。我该检讨一下,假期的执行力不够,效率低,也容易七想八想。昨日在募格学术上看到一些课程,想来应该会有用,可以听一听。
早上醒来,看到jimmy大佬卖服务器,99块一个月试用。正愁没有服务器练习,我得买来用一用。知识创造财富的又一个事例,真想有一天也能成为像jimmy一样的生信大神。
领取专属 10元无门槛券
私享最新 技术干货