模式匹配修饰符

用/i进行大小写无关的匹配

use 5.010;
print "Would you like to play a game?";
chomp($_=<STDIN>);
if (/yes/i) {
    say "In that case,I recommend that you to bowling.";
}

用/s匹配任意字符

默认情况下,点号(.)无法匹配换行符,如果希望点号能匹配这些换行符,那么/s修饰符可以完成这个任务。

use 5.010;

$_="I saw Barney\ndown at the bowling alley\nwith Fred\nlast night.";
if (/Barney.*Fred/s) {
    say "That string mentions Fred after Barney!";
}

用/x加入空白符

允许我们在模式里随意加上空白符,从而使它更易阅读,理解。
由于加上/x后模式里可以随意插入空白,所以原来表示空白和制表符本身的空白符就失去了意义,perl会直接忽略。
但我们总可以通过转义方式变通实现,\s(或者\s*,或是\s++),表示匹配空白符。
Perl 还会把模式中出现的注释当作空白符直接忽。

/
    -?          #一个可有可无的减号
    [0-9]+      #小数点前必须出现一个或多个数字
    \.?         #一个可有可无的小数点
    [0-9]*      #小数点后面的数字,有没有都没关系
/x              #字符串末尾

组合选项修饰符

如果需要对单次匹配使用多项修饰符,只需要把它们接在一起写在模式末尾(不用在意先后顺序):

if (m{
      barney  # 小伙子barney
      .*      # 夹在中间不管什么字符
      fred    # 大嗓门的fred
   }six) {    # 同时使用 /s /i /x
      print "That string menthions Fred after Barney!\n";

 }

选择一种字符解释方式

Perl 5.14开始增加一些用于通知perl如何解释字符意义的修饰符。
总共有三种字符解释方式:ASCII Unicode locale 修饰符/a告诉Perl采取ASCII模式,而/u则表示采取Unicode方式,
最后/l表示遵从本地化语言的设定。 如果不提供这类修饰符,Perl会根据perlre文档描述的方式采取最为妥帖的行为。而通过使用
修饰符,你可以显示制定程序确切的行为。

use 5.014;

 /\w+/a    #仅仅是 A-Z a-z 0-9 _ 这些字符
 /\w+/u    #任何Unicode当中定义为单词的字符
 /\w+/l    #类同于ASCII的版本,但单词字符的定义取决于本地化设定
posted @ 2013-09-16 09:20  新闻官  阅读(289)  评论(0编辑  收藏  举报