perl学习笔记6 z

52 篇文章 0 订阅

1.  匹配运算符  m/ /

Ø   =~运算符被称为绑定运算符。因为无论在它的左边放上什么,它总能够把它绑定砸到它右边的常规表达式运算符。这样,匹配运算符就能作用到字串(注意:如果常规表达式不被绑定到特定的字串,那么它将对一个名为$_的特别变量的值进行操作。)

Ø   m / / 为匹配运算符,用来检查字符串中是否存在需要匹配的字符。匹配运算符带有两个运算对象。第一个运算对象是要查找的常规表达式(即匹配范式),被放在m/ / 运算符的反斜杠间。第二个圆算对象是要在其中查找的字串,该运算对象通过=~运算符赋给匹配运算符。

例如:

$string =~ m/snow/

就是在字符串变量$string中匹配snow字符串。

Ø   在默认的情况下,常规表达式是区分大小写。常规表达式不仅仅包括文字字符,也可以是变量。

Ø   运算符m/ /的语法非常灵活。正斜杠并不是必不可少的;任何非字母或数字字符、非空白字符都可以用作定界符(用于定界运算符各部分的字符)。如果使用正斜杠作为范式的定界符,那么m前缀可以省略,这是较为流行的写法。

2.  替代运算符 s/ /

Ø         s/ /替代运算符把范式(打算替换掉的字串)放在第一个正斜杠和第二个正斜杠之间,把替代范式(要替换成的字串)放在第二个正斜杠和第三个正斜杠之间。

Ø         类似匹配运算符,替代运算符也用绑定运算符来指定即将被查找的字串(要在其中查找目标字串)。

Ø         替代运算符也可使用除“/”外的其他定界符。但s在替代运算符中是必须的。

Ø         $matches = $string =~ s/plant/word/g

在上述的表达式中绑定运算符用来指定要在其中查找的字串(就是$string),而赋值运算符要先取得s/ / /运算符的运算结果,再把这个结果赋给$match变量

3.  特殊字符和字符类型

Ø         常规表达范式不仅仅能够包括字母、单词和变量,还可以包括一些简单的特殊字符和字符类型。

 

字符

匹配

字符

匹配

/d

任何数字

/D

任何非数字

/w

任何词

/W

任何非词

/s

任何空白字符

/S

任何非空白字符

 

其中,“单词字符”包括字母、数字或者下划线字符;而“空白字符”包括空格、制表符、回车、换行或者换页字符。句点(。)是一个特殊字符,它对应 除换行之外的其他任意字符。

 

Ø         范围类型使用方括号封闭。如 [1-9],表示匹配19之间的所有数字。如[abc],表示与abc这三个字符相匹配,但“abc”不与这个表达式匹配。

 

4.  选择符

选择符用竖线(即“|”)来表示。利用选择符可以从一个单词或范式列表中选出一个单词或范式。如:

$string =~  / stop | quit | end /

表示从字符串变量$string中匹配字符stopquitend这三个字符。

$string =~ m / ( hello | hi ) there/

表示从字符串变量$string中匹配字符 hello therehi there

 

5.  限定符

Ø         Perl常规表达式可以使用一种叫限定符的特殊符号,它可以同时匹配范式的多个实例。

Ø          

限定符

匹配的实例数

Pattern *

任意个数

Pattern +

1个或多个

Pattern ?

01

Pattern {n}

n

Pattern {n,m}

nm

 

Ø         例如:

s / 1 / d * 1 / 22

这个范式的意思是:查找字符“ 1 ,它的后面要有任意长的数位字符,接着又是一个字符“1”。限定符的优先级高于选择运算符。在常规表达式中,他们是优先执行的一种运算符。

 

 

6.  限定贪婪符

Ø         在缺省情况下,* + 限定符匹配满足常规表达式的一个范式的最大实例数。可以用问号(?)显式地规定限定符为不贪婪。如果问号放在另一个限定符之后(甚至另一个问号之后),都可以使用限定符不贪婪。这就意味着限定符将匹配满足常规表达式的一个范式的最少实例数。

Ø         例如:

$string =~ s / N . * here / . / /

$string =~ s/ N . * ? here / . / /

上面的将匹配尽可能长的以N开头,并以here.结尾的句子。

下面的将之匹配第一个以N开头,并以here.结尾的句子。

 

7.  声明

声明有点类似于特殊字符,只是它的长度为0,这就意味这它不会给匹配的字符串增加任何长度,也以为着不改变字串的任何东西。这些声明可在匹配范式、替代范式或者字串(赋值语句、打印语句等)中使用。

Ø         /u    声明使下一个字符变大写;

Ø         /l     声明使下一个字符变小写;

Ø         /U    声明使文本剩余的字符变大写;直到碰到/E声明、常规表达式结束或字符串结束。

Ø         /L    声明使文本剩余的字符变小写;直到碰到/E声明、常规表达式结束或字符串结束。

Ø         /Q   声明对除字母外的其他字符进行换码处理,直至碰到/E声明、常规表达式结束或字符串结束。

Ø         ^/A     声明用于匹配字串开始。

Ø         $/Z      声明用于匹配字串的结束或刚好在字串结束前的换行符。

Ø         /z     声明只匹配字串的结束。

Ø         /b    声明用于匹配一个单词边界

Ø         /B    声明用于匹配一个非单词边界

Ø         /w/W         组合在一起用可以匹配的是单词的一部分。

Ø         另一种声明是后看声明,它的书写格式如下:

( ? < = value1) value2

              它用于检查value1是否恰好在value2之前出现。

Ø         另外,还有向前看声明(? = 范式)、非向后看声明(!<= 范式)以及非向前看声明 ! = 范式)。

 

8.  向后引用

当括号用于perl的正则表达式时,由每个括号的表达式进行匹配的目标字符串的这个部分将被记住。Perl将把这个匹配的文本记录在一些特殊的变量中,这些变量的名字是$1(用于第一组括号)$2(用于第二组括号)、$3$4等等

              / ( / d {3} )- ( / d {3} ) – ( / d {4} ) /

不过注意,模式匹配运行成功是,变量$1等的值将被清除(不管它是否使用括号),如果并且只有当模式匹配运行成功时,这些变量才被设置。

              m / ( / d {3 }) – ( / d {3 }) – ( /d {4})/;

              print “The area code is $ 1” ;

上面的例子中,使用$1时根本没有确定模式匹配是否可行。如果模式匹配运行失败,将会带来麻烦。

但如下将是可行的

              if  ( / ( /d {3}) – ( / d {3}) – ( / d {4}) / )  {

                     print  “The area code is $ 1” ;

              }

 

9.  常规表达式的修改符

常规表达式的修改符改变perl对某些常规表达式的处理。修改符一般房子语句的最后一个正斜杠(或其他任何分隔符)的后面。修改符还可以在匹配范式内定义,这是用( modifier )来实现的。

Ø         /x           允许程序员在范式中加上注视和额外的空白字符,以提高程序的可读性。

Ø         /s            这个修改符将使引擎在不区分大小写的情况下匹配范式

Ø     /s              用于单行方式,它决定圆点(.)是否匹配换行符。如果使用/s,圆点就匹配换行符,反之亦然。

Ø     /m           用于多行方式,它决定脱字符(^)和美元符($)是否匹配换行符。如果不用/m^$只能定位在资产的开始和结束处,它们并不匹配嵌入的换行符,与/A/Z相同。如果打开多行方式,那么脱字符和美元符匹配将正好处在嵌入换行符前后的一个位置。

 

10.              全局查找和/g修改符

Ø         修改符的基本功能是执行全局修改

Ø         在“列表使用场合”下,/g修改符与匹配运算符一起使用时,匹配运算符从列表内所有可能的匹配中返回由括号捕捉的值。

Ø         while循环加上/g匹配”能够改变匹配的开始位置,每次循环时就能够找到不同的字串,达到遍历字串中所有单词的目的。

While ( $string =~ m / / $ ( / w+ ) /g  ) {

。。。。。。。;

}

Ø         /g在字串中的使用位置也可以人为改变。利用函数pos $string ,可以返回一个字串中的当前位置,/g匹配将从这个位置开始。这就意味着只有一个当前位置。因而,可以利用pos函数在一次匹配后的返回值,从而开始下一次匹配(注意,pos函数返回的是紧接在匹配之后的位置)。可以把pos作为左值使用。也就是说,可人为地设定匹配的开始位置。最后,也可以用reset函数来重置字串,使下一次匹配从字串的首字符开始。

Ø         /G修改符与/A声明相似;不过,/A只匹配字串的开始,而/G仅匹配前一个/g匹配的停止位置。如果没有/g修改符,是不可以使用/G的。

Ø         /c修改符,告诉常规表达式引擎在匹配失败后不重置查找位置。

 


<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值