正则表达式-1

来源:互联网 发布:sql*plus命令 编辑:程序博客网 时间:2024/06/08 04:18
-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----------------------------------------------------------------------------------
0 0