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

以m//进行匹配:表达式可以写成m(fred) m<fred> m{fred}或m[fred]
可选修饰符:附加在正则表达式结尾的界定符右边,改变正则表达式的默认行为,如is
      /i 大小写无关匹配
      /s 匹配任意字符(如在默认情况下,点号.无法匹配换行符,加s后可以,可以达到[\d\D]的效果)
      /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...
      $_="Hello there,neighbor";
      if(/\s(\w+),/){
              print "the word was $1 \n";
      }
捕获变量的生命期:存活到下次成功的模式匹配为止
不捕获模式:(?:) 如下bronto可能有也可能没有,那么当没有时,允许不捕获
      if(/(?:bronto)?saurus (steak|burger)/){
              print "Fred wants a $1\n";
      }
命名捕获:(?<LABEL>PATTERN),在捕获时使用特殊标签,如下例
      my $names='Fred or Barney';
      if($names=~m/(?<name1>\w+) (?:and|or) (?<name2>\w+)/){
              say "I saw $+{name1} and $+{name2}";
      }
反向引用则可使用\g{label} 的写法,如下
      my $names='Fred Flinstone or Barney Flinstone';
      if($names=~m/(?<last_name>\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";
              }
     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值