Perl语言入门——以正则表达式进行匹配

2014年11月25日 10:08 新浪博客

以m//进行匹配:表达式可以写成m(fred) m m{fred}或m[fred]
可选修饰符:附加在正则表达式结尾的界定符右边,改变正则表达式的默认行为,如is
            /i大小写无关匹配
            /s匹配任意字符(如在默认情况下,点号.无法匹配换行符,加s后可以)
            /x在模式里随意加入空白,使其更易阅读
            在一个模式中使用多个修饰符,先后顺序并不影响匹配结果
锚位:让模式直接匹配字符串的某处
      (^)标示字符串的开头 如/^fred/只匹配位于字符串最前端的fred
      ($)标示字符串的结尾 如/fred$/只匹配字符串最后面的fred
       \b  单词边界锚位如/\bfred\b/可匹配fred,但无法匹配frederick和alfred
绑定操作符:默认情况下模式匹配的对象是$_,=~能让Perl拿右边的模式来匹配左边的字符串
            如my $some_other="I dream of betty rubble.";
            if($some_other=~/\brub/){
               print"Aye,there's the rub.\n"
            }
模式串中的内插:正则表达式里可以进行双引号形式的内插,如下进行匹配时,模式是$what的值
                my$what="larry";
                while(<>){
                  if(/^($what)/){
                     print"We saw $what in beginning of $_";
                  }
                }
捕获变量:我们在模式里使用圆括号时,用来表示不同的模式组,但圆括号同时也启动了正则表达式
          处理引擎的捕获功能,即把(圆括号中模式所匹配的)部分字符串暂时记下来的能力。
          模式里括号有多少对,匹配变量就有多少个,$1$2...
          $_="Hellothere,neighbor";
          if(/\s(\w+),/){
           print"the word was $1 \n";
          }
捕获变量的生命期:存活到下次成功的模式匹配为止
不捕获模式:(?:) 如下bronto可能有也可能没有,那么当没有时,允许不捕获
            if(/(?:bronto)?saurus(steak|burger)/){
              print"Fred wants a $1\n";
            }
命名捕获:(?PATTERN),在捕获时使用特殊标签,如下例
          my$names='Fred or Barney';
          if($names=~m/(?\w+)(?:and|or) (?\w+)/){
            say"I saw $+{name1} and $+{name2}";
          }
          反向引用则可使用\g{label} 的写法,如下
          my$names='Fred Flinstone or Barney Flinstone';
          if($names=~m/(?\w+)and \w+ \g{last_name}/){
             say"I saw $+{last_name}";
          }
自动匹配变量:三个自带的捕获变量,不必圆括号就能引入
              $&保存字符串里实际匹配模式的部分
              $`保存匹配起始位置之前的字符串
              $'保存匹配结束位置之后的字符串
              注意,如使用了自动匹配变量,正则表达式的运行速度会变慢
通用量词:在{}里指定重复次数的范围,如{5,15} {3, } {5}
优先级:从高到低依次为 圆括号、量词、锚位和序列、择一、元素
模式测试程序:一个有用的小程序,用来检测某些字符串是否被指定的模式匹配
              while(<>){
                chomp;
                if(/YOUR_PATTERN/){
                   print"Matched: |$
`<$&>$'|\n";
                }else{
                   print"No match: |$_|\n";
                }
              }     
发表了博文《Perl语言入门——以正则表达式进行匹配》以m//进行匹配:表达式可以写成m(fred)mm{fred}或m[fred]可选修饰符:附加在正则表达式结尾的界定符右边,改变正则表达式的默认行°Perl语言入门——以正则表达式进行匹配 ​​​​