加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl:正则表达式部分

发布时间:2020-12-15 21:02:30 所属栏目:大数据 来源:网络整理
导读:使用简单模式匹配 若模式匹配的对象是$_的内容,只要把模式写在一对(/)中就可以了。 #$_= "yabba?dabba?doo" ;? #if?(/abba/){? #print? "it?matched!n" ;? #}? unicode属性 若要匹配某项属性,只需要把属性名放入p{PROPERTY}里面。比如有许多字符属于空

使用简单模式匹配

若模式匹配的对象是$_的内容,只要把模式写在一对(/)中就可以了。

 
 
  1. #$_="yabba?dabba?doo";?
  2. #if?(/abba/){?
  3. #print?"it?matched!n";?
  4. #}?

unicode属性

若要匹配某项属性,只需要把属性名放入p{PROPERTY}里面。比如有许多字符属于空白符,相应的属性名为Space,要匹配这类的字符可以

 
 
  1. if(/p{Space}/)?{?
  2. print?"The?string?has?some?whitespace.n";?
  3. }?

若要匹配数字,可以用Digit属性

 
 
  1. if(/p{Digit}/){?
  2. print?"The?string?has?a?digit.n";?
  3. }?

把小写的p改成大写P,就表示否定意义,匹配指定属性意外的字符。

元字符

点号(.)是能匹配任意一个字符的通配符,换行符不能匹配。如果希望点号仅匹配他本身,则在他前面加上反斜线。即任何元字符前面加上反斜线,就会使它失去元字符的特殊作用。反斜线是我们的第二个元字符,要匹配真正的反斜线,请用两个反斜线表示。

 
 
  1. $_='a?real??backslash';?
  2. if(//){?
  3. ????print?"It?matched!n";?
  4. }?
  5. ?

简单的量词

星号(*)用来匹配前面的条目出现零次或多次的情况。点号星号(.*)组合起来可以匹配任意字符零到无限次。加号(+)会匹配前一个条目一次以上,以及匹配空格。问号(?)匹配前一个条目出现一次或者不出线。

模式分组

?在正则表达式中,()的作用是对字符串分组,()也是元字符。/fred+/匹配的是freddddd,/(fred)+/匹配的是fredfredfredfred,/(fred)*/匹配的是任意字符。

 
 
  1. $_="abba";?
  2. if?(/(.)1/)?
  3. ???#if(/(.)(.)/)?
  4. ?{?
  5. ??print?"It?matched?some?character?next?to?itself!n";?
  6. ??}?
  7. ????

?反向引用不必紧接在对应的捕获组括号后面。下面的模式会匹配y后面的4个连续的非换行符,并用1反向引用表示匹配d后也出现这4个字符的情况。

 
 
  1. $_="abba?dabba?doo";?
  2. ??if(/y(....)?d1/)?
  3. ??????#if(/y(....)?d(....)/)?
  4. ?????{?
  5. ?????print?"It?matched?the?same?after?y?and?d!n";?
  6. ????}?

?也可以用多个括号来分成多组,每个组都可以有自己的反向引用。

 
 
  1. $_="yabba?dabba?doo";?
  2. if?(/y(.)(.)21/)?
  3. ??#if(/y(.)(.)(..)(.)/)?
  4. ??{?
  5. ????print?"It?matched?after?the?y!n";?
  6. ???}?

?下面这种情况perl匹配的是1,11还是111呢?

 
 
  1. use?5.010;?
  2. $_="aa11bb";?
  3. if(/(.)111/)?
  4. ?{?
  5. ??print?"It?matched!n";?
  6. ??}?

perl会认为是111,那么如何避免呢?

 
 
  1. use?5.010;?
  2. $_="aa11bb";?
  3. if?(/(.)g{1}11)/{?
  4. ????print?"It?maatched!n";?
  5. ???}?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读