正则表达式-1

-1----------------------------------------------------------------------------------
什么是正则表达式?
  正则表达式(regular expression),在perl里通常是也叫模式匹配(pattern),是用来表示
  匹配(不匹配)某个字符串的特征的模板。


  使用简单模式:
   $_='yabb dabba doo';
   if(/abba/)
   {
      print "It matched\n";
   }
   表达式/abba/会在$_查找这个四个字组成的字符串,如果找到返回真。

   Unicode属性:
     Unicode字符能够理解自身含义,它们不只是简单的字节序列。每个字符除了字节组合之外,
     还附带着属性信息。

     若要匹配某项属性,只需要把属性名放入\p{PROPERTY}里面。比如匹配有许多空白符
     (whitespace),相应的属性名为Space,所以匹配带有这属性字符,可以用\p{Space}表示:

     if(\p{Space}) #总共有26个不同的字符带有此属性
     {
        print "The string some whitespace\n";
     }

     if(/\p{Digit}/) #总共有411个不同的字符带有些属性
     {
        print "The string has a digit\n";
     }

   关于元字符:
     点(.):是能匹配任意一个字符的通配符(除换行符\n)
     星(*):是能匹配前面的条目零次或多次。
     加(+):是能匹配前面一个条目一次或一次以上
     问号(?):是匹配前一个条目出现一次或零次

  模式分组:
    在正则表达式中,圆括号((),或称小括号)的作用是对字符串的分组。因此也是元字符。

    /testtesttest/;
    /(test)+/;

   圆括号中模式匹配的文字也称为捕获组。
   反向引用的写法是在反斜线后面接上数字编号 \1,\2像这样。

   $_='abba';
   if(/(.)\1/)#匹配bb,(\.)\1表明需要匹配连连续出现的同样的字符。
   {
       print "$_\n";
   }

   $_='yabba dabba doo';
   if(y(....) d\1)#匹配abba
   {
      print "get\n";
   }

   $_='aa111bb';
   if(/(.)\111/)
   {
      print "get\n";
   }
   像这样连续出多个数字,那在这里到底是要匹配\1,\11,还是\1111呢?
   其实在这个问题上perl逻辑很简单,它尽可能创建多数量的反引用,所以最终匹配\111.


   \g{1},这样就能消除部分的二义性。

   if(/(.)/\g{1}11)
   {
      print "get\n";
   }

   还可以引用负数

   $_='xaa11bb';
   if(/(.)(.)\g{-1}11/)
   {
      print "get\n";
   }


  选择一个匹配:
    竖线(|) :通常读或,意思是要么匹配在左边的内容,要么匹配右边的内容

   if(/fred|barney|test/)
   {
      print "get\n";
   }

 匹配字符集:
   字符集(character class)指的是一组可能出现的字符,通常写在Y方括号内[]表示

   $='Teh HAL-90000 requires authorization to contine.';
   if(/HAL-[0-9]/)
   {
      print "$_\n";
   }

   要想匹配这些字符集除外可以在前面加脱字符(^)
   [^0-9] 表示匹配除0-9以外的字符

 字符集的简写:
   \d  表示匹配数字集等同于[0-9]

   \s 表示匹配任意空白符,效果等等同于unicode属性的\p{Space}
   \s 仅能表示以下5个字符换页符(form-feed),水平制表(tab),换行符(newline),
      回车符(carriage return)及空格符本身[\f\t\n\r]

  \h 表示匹配水平空白符

  \v 只能匹配垂直空白符

  \h\v并起来就成了\p{Space}



  \w 称作"单词"字符,尽管它能匹配的字符并不是严格意义上的单词。
     在ASCII语义下,\w匹配是一组字符:[a-zA-Z0-9]


-1----------------------------------------------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值