当前位置: 首页 > news >正文

Perl 小骆驼学习笔记 - 8. 用正则表达式进行匹配 - 详解

需要注意在perl中默认的模式匹配操作对象是$_;

1. m//进行匹配

      前面提到的 / /是m//匹配符的简写,但m//与m!!,m@@,m##都表示一样的含义,即//只是圈定界限的符号而已。

2. 模式匹配修饰符

    a. 用 '/i' 进行大小写无关的匹配

         (m//i)斜线圈定的字符不区分大小写;

    b. 用 '/s' 匹配任意字符

         重要的是它可以匹配换行符

         m/ fred.*aaa/;两者间有\n则不匹配;

         m/ fred.*aaa/s;两者间有\n一样匹配;

     c. 用/x加入空白符

         他可以使匹配符可以加入任意的空白符

         m/aaa.sdsd$sss*/;

         m/aaa . sdsd $ sss*/x;两者表达一样的意义

         同时不同的修饰词是可以组合应用的。

  d. 选择一种字符解释方式(针对5.014)

        这里是指采用/a /u /l 选择按ascii,unicode,local来解释模式匹配。

3.锚位

     用来指定匹配的位置,而无需总是从头开始。

\A:表示字符串必须以其后的字符开始;

             m{\Ahttp?://}i;必须以https开头;

\z :表示字符串必须以他前面的内容结尾,后面不能有任何东西;

     \Z:表示字符串必须以他前面的内容结尾,后面允许有换行符;

     ex:

         m{\A\s*\Z}; 表示一个空白行;

4. 单词锚位(\b

     用来查找某个词(他可以由数字,字母和下划线组成)

m{\bword\b}: -  可以匹配word,但不能匹配aword,worda。

m{\bword};    -  可以匹配wordlllll,但不匹配aword;

 m{word\b}     -  可以匹配aword,但不能匹配worda

     \B可以匹配所有\b不能匹配的位置。

5. 绑定操作符 =~

      解脱了$_;他是采用右边的模式来匹配左边的字符串。

     优先级很高,其次返回值为真或者假(0或者1);

6. 模式的内插

     可以进行双引号形式的内插;

      ex.   

 #!/usr/bin/perl -w
  my $what = "larry";while (<>){
      if(m{\A$what}) {
          print "find it";}
   }

  其中,$what并不一定需要直接声明,也可以从@ARGV中获得:

  my $what = shift @ARGV;   #取出第一个元素;

7. 捕获变量

      很容易理解,对应了匹配模式里面小括号内的内容,只不过将这些内容放在了$1,$2,$3....里面了,可以被提出来应用。

8. 捕获变量的存活期

       捕获变量会在下一次成功捕获的时候被覆盖,但是失败的捕获并不是对其有什么影响。

       所以匹配模式一般总存在于if 和while语句的条件,用来判断捕获是否成功。在写perl时候,必须将捕获用if  while进行判断,以防止错误。

 9.不捕获变量

     有时并不是所有带括号的模式匹配都是我们关心的,那么很好,我们采用了一种方法不捕获它。

     /(?:kkk)(aaa)(ccz)(wqqe)/

     通过在括号内加 ?: 的方式,可以不捕获它,$1捕获的是(aaa)的内容。

10.命名捕获

      由于在捕获过程中可以会因为括号过多引起争议,所以引入了命名捕获;

    用法:

/(?匹配1)(匹配2)(匹配3)(?匹配4)/

    将只捕获匹配1,4的内容,并将name,name1作为键,将捕获内容作为值存在默认的哈希 %+ 中,当需要引用时,采用 $+{name},$+{name1}引用

11. 自动捕获变量

     $&:表示匹配中的数据;

     $`:匹配段之前的数据;

     $':匹配段之后的数据;

    三者合起来就是待匹配的数据。他们的值会保存到下次模式匹配成功之前。

12. 通用量词

    {n,m},表示匹配模式中出现的的次数范围;

    ex:

      /a{3,5}/只能匹配aaa,aaaa,aaaaa 三个。

     前面说的+,?,*是这种用法的特例。

13. 优先级

    1. 最高级别:(),由于分组和捕获

    2. 量词

    3. 锚位和序列

    4. 择一竖线

    5. 基础的匹配模式

有时候理解复杂的模式比较困难时,建议加上非捕获的圆括号进行分组,这样不会有捕获值。

14. 模式测试程序

    在编写复杂的perl程序时,很容易搞不懂一个模式在干什么,所以需要设计一个程序,来确保是不是和自己想的一样。

#! usr/bin/perl
   use 5.010;
   while(<>){
      chomp;
      if(/your_pattern/){
          print " $`<$&>$'\n";
      }else{
          print "no match $_";}}

总结

本节开始描述在使用正则表达式上一些小技巧,包含锚位,捕获变量,模式匹配修饰符等,这些小技巧或者说特别的匹配方式,在处理一些场景时,有时候是很高效,可以看看怎么使用会比较高效。

http://www.jsqmd.com/news/378551/

相关文章:

  • 2026年辽宁性价比高的塑料制品企业盘点,说说枣强栋悦可以信任吗 - myqiye
  • 公交司机上岗照片要求:尺寸、格式、压缩与审核全攻略
  • 一起聊聊荆州医用卫生擦手纸生产厂,哪家口碑好 - mypinpai
  • 瑞祥商联卡回收价格表与超简单步骤汇总 - 京回收小程序
  • FC交换机原理
  • 2025年度优质气动高温调节阀批发厂家排行榜出炉,高性能调节阀/气动高温调节阀/美标调节阀/自力式压力调节阀调节阀制造企业排名前十 - 品牌推荐师
  • 2026年口碑好的白色PE袋/黑色PE袋供应商推荐怎么联系(畅销) - 品牌宣传支持者
  • 【华为OD机试真题 双机位A卷】937、正则表达式替换 | 机试真题+思路参考+代码解析 (C++、Java、Py、C语言、JS) - 指南
  • 聊聊2026年漳州室内装修公司,哪家口碑好费用合理 - 工业品网
  • 天然草本防脱育发产品有哪些?哪款洗发水比较好用?十大公认最好的防脱洗发水推荐 - 博客万
  • 中石化加油卡回收八种路径解析 - 京回收小程序
  • 关于我弄丢了佳明本能3战术版防水塞这件事
  • 2026年靠谱的电动功能五金/橱柜功能五金厂家选择指南怎么选(真实参考) - 品牌宣传支持者
  • 2026年评价高的直角支架铝型材深加工/货架支架铝型材深加工哪家专业工厂直供推荐 - 品牌宣传支持者
  • 探讨冷轧薄板制造企业,哪个口碑好值得合作 - 工业品网
  • 2026年比较好的过山车游乐设施/家庭过山车游乐设施生产商实力参考哪家质量好(更新) - 品牌宣传支持者
  • 2026年口碑好的固化TAIC交联剂/70粉末TAIC交联剂源头厂家推荐帮我推荐几家 - 品牌宣传支持者
  • 计算机毕业设计之基于ssm的大学生创新创业管理系统
  • 怎么选人才落户咨询品牌企业 海南睿臻领航是优选 - 工业品牌热点
  • 2026年知名的罗茨螺杆真空机组/螺杆真空机组可靠供应商参考推荐几家 - 品牌宣传支持者
  • 基于PLC和组态软件的智能停车场收费系统及其电气控制
  • 了解一下重庆百创短视频,看看性价比高不高、服务靠不靠谱 - myqiye
  • 《李大霄投资战略 第3版》PDF文件完整目录分享
  • 再论自然数全加和-质数的分布
  • 甘肃楚邦装饰研发能力强吗,2026年兰州靠谱的家装公司排名 - 工业推荐榜
  • 诚信的GEO企业怎么收费?哪家性价比高? - mypinpai
  • 2026年热门的虾仁/速冻水晶虾仁供应商采购指南怎么联系 - 品牌宣传支持者
  • 2026年质量好的GEO优化系统推荐,靠谱厂家大盘点 - 工业设备
  • 2026年质量好的吊钩通过式抛丸机/辊道通过式抛丸机厂家实力参考哪家质量好 - 品牌宣传支持者
  • 实测有效✅京东e卡回收天花板!可可收快速到账,批量处理不费手 - 可可收