文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>perl学习笔记6

perl学习笔记6

时间:2007-04-07  来源:dingding

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],表示匹配1到9之间的所有数字。如[abc],表示与a、b和c这三个字符相匹配,但“abc”不与这个表达式匹配。

 

4.  选择符

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

$string =~  / stop | quit | end /

表示从字符串变量$string中匹配字符stop、quit或end这三个字符。

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

表示从字符串变量$string中匹配字符 hello there或hi there。

 

5.  限定符

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

Ø          

限定符

匹配的实例数

Pattern *

任意个数

Pattern +

1个或多个

Pattern ?

:0或1个

Pattern {n}

:n个

Pattern {n,m}

:n至m个

 

Ø         例如:

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修改符,告诉常规表达式引擎在匹配失败后不重置查找位置。

 

相关阅读 更多 +
排行榜 更多 +
方块枪战战场安卓版

方块枪战战场安卓版

飞行射击 下载
战斗火力射击安卓版

战斗火力射击安卓版

飞行射击 下载
空中防御战安卓版

空中防御战安卓版

飞行射击 下载