文档章节

perl学习笔记-----------------------(9)

henni_719
 henni_719
发布于 2017/04/22 17:13
字数 1389
阅读 7
收藏 0
m//(模式匹配)的一种简写。同qw//操作一样,可以使用任何成对的分隔符。因此,可以使用m(fred), m<fred>, m{fred}, m[fred],或者m,fred,, m!fred!, m^fred^,其它非成对的分隔符也可以。
如果使用正斜线(/)作为分隔符,则可以省略掉前面的m。由于Perler 喜欢少输入字符,因此大多数模式使用的是正斜线,如/fred/
如果想写一个匹配web URL 开头部分的模式,你可能使用/http:\/\//来匹配http://。但如果使用m%http://%将更易于阅读,书写,维护,以及调试。使用花括号({})作为分隔符也是很平常的。如果你使用的是专为程序员设计的文本编辑器,由于它能自动从开花括号跳到闭花括号,这对于维护代码将非常有用。
记住,正斜线不是元字符,如果它不是分隔符,则不需在前面使用反斜线。
不区分大小写:/i。要创建一个大小写无关的模式,如匹配FRED 时,也能匹配上fred, Fred,可以使用修饰符/i:
         
print “Would you like to play a game?”;
           chomp($_ = <STDIN>);
           if(/yes/i) {#大小写无关
                  print “In that case, I recommend that you go bowling.\n”;
             }       

匹配任何字符:/s。默认情况下,点(.)不匹配换行符,这对于“单行中查找”的问题能很好解决。如果你的字符串中有换行符,并希望点(.)能匹
配它们,那可以使用/s 这个修饰符。
$_ = “I saw Barney\ndown at the bowing alley\nwith Fred\nlast night.\n”;
if(/Barney.*Fred/s){
print “That string mentions Fred after Barney!\n”;
}

如果不使用/s,那么上述模式将不能被匹配上,因为这两个字符不在同一行中。
/x 修饰符,允许你在模式中加入任何数量的空白。Perl 中,注释可以被作为空白,因此使用/x,可以在模式中加上注释:
/
-? #可选的负号
\d+ #小数点前一个或多个十进制数字
\.? #可选的小数点
\d* #小数点后一些可选的十进制数字
/x #模式结束

井号(#)表示后面是注释,如果需要匹配井号,可以使用\#或[#]。注意不要在注释中使用闭分隔符,否则将结束此模式匹配。如果在一个模式中需使用不止一个修饰符,可以一个接着一个。其顺序是不重要的:
if(/barney.*fred/is/){ # /i 和/s
print “That string mentions Fred after Barney!\n”;
}


下面是包含注释的版本:
if (m{
barney #小个子小伙
.* #可以包含任何字符
fred #嗓门大的小伙
}six) { #修饰符包括包括/s, /i, /x
print “That string mentions Fred after Barney!\n”;
}

注意这里的分隔符:花括号,它允许那些专为程序员设计的文本编辑器可以从正表达式的开端跳到末端。默认情况下,如果模式在字符串开头没能匹配上,它会顺着字符串下去,直到匹配上为止。如果使用了锚定(anchors)则可以要求模式在特定的位置进行匹配。符号^表示在字符串的开头进行匹配,而符号$则表示在结尾。。因此,模式/^fred/只匹配字符串的开头部分;它不会匹配上manfred man。而/rock$/只在结尾处匹配;其不会匹配上knute rockne。锚定不仅仅针对字符串的两头。词界锚定,\b,是针对单词使用的。如/\bfred\b/可以匹配上单词fred
非词界锚定为\B。它将在任何非\b 匹配的点上进行匹配。因此,模式/\bsearch\B/将匹配searches, searching, searched, 但不能匹配search,或者researching。绑定操作符,=~:告诉Perl 将右边的模式在左边的字符串上进行匹配,而非对$_匹配。
my $some_other = “I dream of betty rubble.”;
if($some_other =~ /\brub/){
print “Aye, there’s the rub.\n”;
}
第一次见到绑定操作符(binding operator:=~),可能觉得它有些像赋值操作符,但它不是。其含义是:“这个模式默认将对$_进行匹配,但此时将对左边的字符串进行匹配”。如果没有绑定操作符,则此表达式将对$_匹配。由于绑定操作有非常高的优先级,因此,模式测试部分的括号不是必需的,下面的代码和上面代码的含义是一样的。它将
测试部分的结果(而非行输入)返回给变量$likes_perl:
my $likes_perl = <STDIN> =~ /\byes\b/i;
正则表达式可以被内插,如同双引号字符串一样。。这允许我们快速地写出类似grep 的程序:
#! /usr/bin/perl –w
my $what = “larry”;
while(<>){
if(/^($what)/){ #在字符串前面进行匹配
print “We saw $what in beginning of $_;”;
}
当程序运行时,模式将被$what 的值代替。在本例中,它同使用/^(larry)/是一样的,在行的开头处查找larry。如果没有在程序中具体指出$what 的值,也可以在命令行中输入,然后使用参数@ARGV:
my $what = shift @ARGV;
可以使用eval 块来捕捉错误,或者使用quotemea(或者其等价形式:\Q)将内插部分引用起来,使之不会被当作正则表达式来处理。变量个数同模式中括号对数的个数是相同的。
$_ = “Hello there, neighbor”;
if(/\s(\w+),/){ #空格和逗号之间的词
print “the word was $1\n”; #the word was there
}
也可以一次使用多个:
$_ = “Hello there, neighbor”;
if(/(\S+) (\S+), (\S+)/){
print “words were $1 $2 $3”;
}




© 著作权归作者所有

henni_719
粉丝 2
博文 466
码字总数 343938
作品 0
信阳
QA/测试工程师
私信 提问
Per学习笔记[3]

Per学习笔记 1.子程序 (1)子程序的定义可以在程序的任意位置,且不需要在定义之前有任何声明。 (2)子程序的定义是全局的,可以在子程序中使用全局变量。 (3)所有的Perl 子程序都会返回值,在P...

wbf961127
2017/11/12
0
0
xtrabackup学习笔记

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.7/binary/tarball/percona-xtrabackup-2.4.7-Linux-x86_64.tar.gz yum -y install perl perl-devel libaio liba......

glassboy2009
2017/06/06
0
0
读《PHP和MySQL Web开发》

【第一部分】PHP基础与入门 1、PHP学习笔记1:基础知识快速浏览 http://my.oschina.net/bluefly/blog/472673 2、PHP学习笔记2:文件 http://my.oschina.net/bluefly/blog/477601 3、PHP学习笔...

slyso
2015/07/14
0
0
语言学习读书笔记PHP和asp.net编程语言哪个更有前途?

编程语言一直是学习计算机编程门专业的热门讨论话题,而我也选择了这个专业,入学一年了,马上面临着语言的选择问题,业余我需要选择一门编程语言作为重点研究对象,那么问题来了:到底是选择...

原创小博客
2018/05/30
0
0
9 本最好的 perl 程序员电子书

1) Beginning Perl (Perl 开始) 2) Higher Order Perl (高阶perl) 3) ImpatientPerl (焦急的perl) 4) Modern Perl (现代Perl) 5) Learning-Perl (学习Perl) 6) Object-Oriented-Perl ......

MrMign
2012/04/14
3.7K
2

没有更多内容

加载失败,请刷新页面

加载更多

springMVC 文件上传

相关依赖 使用 springMVC 提供的文件上传需要在项目中加入两个 jar 包,对应的 maven 的依赖分别是:commons-io 和 commons-fileupload <dependency> <groupId>commons-io</groupId> ......

dahuil
15分钟前
0
0
以太坊中文文档翻译-智能合约

本文原文链接 点击这里获取Etherscan API 中文文档(完整版) 完整内容排版更好,推荐读者前往阅读。 智能合约(Contracts) 智能合约相关的 API,接口的参数说明请参考Etherscan API 约定, 文...

Tiny熊
25分钟前
0
0
Tomcat

16.1 Tomcat介绍 16.2 安装jdk 16.3 安装Tomcat 16.4 配置Tomcat监听80端口 16.5/16.6/16.7 配置Tomcat虚拟主机 16.8 Tomcat日志 扩展 java容器比较 http://my.oschina.net/diedai/blog/2713......

tobej
35分钟前
1
0
苹果面向Mac发布英特尔处理器漏洞缓解措施

去年苹果向Safari浏览器推出安全更新以修复基于ARM价格和英特尔的处理器存在的推测执行系列安全漏洞。 不过当时苹果并未发布有关处理器性能下降的测试结果,但大家都知道安装缓解措施会造成处...

linux-tao
今天
1
0
第一个vue应用

https://www.bootcdn.cn/vue/ <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <style> .bg{ color: red; ......

江戸川
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部