`
lxc63lxc
  • 浏览: 29212 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

perl学习日记8正则表达式的应用

 
阅读更多

  1.1      使用m//匹配
  这是m//(模式匹配)的一种简写。同qw//操作一样,可以使用任何成对的分隔符。因此,可以使用m(fred), m, m{fred}, m[fred],或者m,fred,, m!fred!, m^fred^,其它非成对的分隔符也可以。
  如果使用正斜线(/)作为分隔符,则可以省略掉前面的m。这就是前面用的最多的。
  尽量使用一个不会在模式中出现的字符作为分隔 1.2      可选的修饰符
  1.2.1.      不区分大小写:/i
  1.2.2.      匹配任何字符:/s
  默认情况下,点(.)不匹配换行符,这对于"单行中查找"的问题能很好解决。如果你的字符串中有换行符,并希望点(.)能匹配它们,那可以使用/s 这个修饰符。
  $_ = "I saw Barney\ndown at the bowing alley\nwith Fred\nlast night.\n";
  if(/Barney.*Fred/s){
  print "That string mentions Fred after Barney!\n";
  } 1.2.3.      添加空格:/x
  /-?\d+\.?\d*/ #这是什么含义?
  / -? \d+ \.? \d* /x #要好些
  主要就是增加可读性,但不改变语义 1.2.4.将可选字符结合起来
  if(/barney.*fred/is){ # /i 和/s 书上写错了,多了一个(/)
  print "That string mentions Fred after Barney!\n";
  } 1.3      锚定
  模式/^fred/只匹配字符串的开头部分;它不会匹配上manfred man。而/rock$/只在结尾处匹配;其不会匹配上knute rockne
  在模式中^,有其它的用途。在字符类中,如果将其放在最前面,将会得到此集合的补集。
  记住/^fred$/能同时匹配上"fred"和"fred\n"。
  注意是整个字符串的结尾和开头,不是某个单词的结尾我开头。
  有时,想同时使用这两个锚定来确保匹配整个字符串。一个经常使用的例子是/^\s*$/,它将匹配一个空行(blank line)。这里的"blank(空白)",可以是空白符,如制表符,空格等,它们是不可见的。能被匹配上的行看起来都是一样的,因此这个模式将所有的空白按一种方法来处理。如果没有锚定,则它还会匹配上非空行。 1.3.1.词锚定
  词界锚定,\b,是针对单词使用的。如/\bfred\b/可以匹配上单词fred,但不能匹配frederick,
  Alfred
  词是字母,数字,下划线组成的序列。这种意义下的词可由/\w+/匹配上。下句中有5 个词:That,s,a,word,以及boundary。词上的引号不会改变词界的位置;这些词是由\w 字符组成的。
  以上划线的就是"词" ,\b 只匹配这样的词
  当使用/\bhunt/ 将匹配上像hunt, hunting, hunter,这样的单词,但不会匹配shunt,而/stone\b/将匹配sandstone, flintstone,而不能匹配上capstones。 1.4      绑定操作符,=~
  my $some_other = "I dream of betty rubble."; if($some_other =~ /\brub/){ print "Aye, there's the rub.\n"; } 其含义是:"这个模式默认将对$_进行匹配,但此时将对左边的字符串进行匹配"。
  print "Do you like Perl? ";
  my $likes_perl = ( =~ /\byes\b/i);
  … #Times passes…
  if($likes_perl){
  print "You said earlier that you like Perl, So… \n";
  …
  }
  my $likes_perl =  =~ /\byes\b/i;    #一样正确,因为~的优先级高 1.5      模式内的内插
  #! /usr/bin/perl  w my $what = "larry"; while(){ if(/^($what)/){ #在字符串前面进行匹配
  print "We saw $what in beginning of $_;";
  }
  也可以从程序参数读取模式
  my $what = shift @ARGV;
  /^(fred|barney)/:在行首查找fred 或者barney。括号(在查找larry 的例子中不是必须的)是非常重要的,如果没有它,则在行首查找fred,或在此行中任意位置查找barney。
  如果$what 的值为'fred(barney',这个模式是/^(fred(barney)/。上述模式是不能工作的,会由于错误使用正则表达式而使程序垮掉。
  1.6      匹配变量
  $_ = "Hello there, neighbor"; if(/\s(\w+),/){ #空格和逗号之间的词
  print "the word was $1\n"; #the word was there
  }
  $_ = "Hello there, neighbor";
  if(/(\S+) (\S+), (\S+)/){
  print "words were $1 $2 $3";
  }
  其输出为words were Hello there neighbor
  my $dino = "I fear that I'll be extinct after 1000 years.";
  if ($dino =~ /(\d*) years/) {
  print "That said '$1' years.\n"; # 1000
  }
  my $dino = "I fear that I'll be extinct after a few millions years.";
  if ($dino =~ /(\d*) years/) {
  print "That said '$1' years.\n"; # 空串     暂没弄清楚为啥$1有单引号,如果打印$2会怎样?是不是因是undef而显示0 (哈批,因为它想打印单引号出来,$2也是打印空串)
  }
  1.6.1.内存值的保存
  这些匹配变量的值会保持不变,直到下一个模式成功匹配为止
  但是如果想在过几行之后再用$1是非常不好的习惯,如果调试人员在这之间又加了模式匹配,就发生了错误。 1.6.2.自动匹配变量
  if ("Hello there, neighbor"=~ /\S(\w+),/){ pirnt "That was ($`)($&)($')"; } 变量$1 中的值为there,而$&为整个被匹配的部分,注意不再是限于括号了。匹配部分的前一部分存放在$`之中,后一部分被存到$',所以输出的消息为(Hello)( there,)( neighbor)
  这里的代价是,如果你使用了这三个自动匹配变量中的任意一个,无论在程序的什么地方,其它地方的正则表达式的运行数度会变慢一些。虽然,变慢的程度不大,但已经足够让人担忧,因此许多Perl 程序员从不使用这些自动匹配变量。相反的,使用的替代的方法。例如,如果需要使用$&,那么在整个模式上加上括号,并使用$1 代替。 1.7      一般的数量词
  模式/a{5,15}/将匹配5 个到15 个a 中的任意一个(包括5,和15)
  /(fred){3,}/将在一行中有3 个或者更多个fred 时匹配上(fred之间不允许有其它字符,包括空格)
  /\w{8}/将严格的匹配8 个word(字母,数字,下划线)(可能被其中一个长字符串部分所匹配上) 1.8      优先级
  1.在此优先级表的最顶端是括号:(()),在分组和引用内存值的时候使用。括号内部的任何部分比括号外的部分结合更紧密。
  2.第二级是数量词。这里有星号(*), 加号(+),问号(?)以及由花括号表示的数量词,如{5,15}, {3, }, {5}等。它们通常和前一项元素结合。
  3.第三级的是锚定和序列(sequence)。锚定包括(^) 表明字符串的开头,($)表明结尾,(\b)词界符,(\B)非词界符。序列(一个元素紧接着一个元素)实际上是一种操作,虽然它没有使用元字符。这段话的含义是一个单词中的字母结合更紧密,就像锚定紧贴字母一样。
  4.优先级最低的是竖线(|),表示或。由于其优先级最低,它通常将模式划分成几个部分。它在优先级最底端是因为我们希望像|/fred|barney/里面的字母比或(|)结合更紧密。如果或(|)的优先级比序列的优先级更高,那么,上述模式的含义是匹配fre,接着是d 或者b, 然后是arney。因此,或(|)的优先级最低,字母序列的优先级要高些。 1.8.1.优先级练习
  例如,/^fred|barney$/很可能并不是程序员想要的模式。由于竖线(|)的优先级最低;它将上述模式分成了两部分。这个模式在或者开头是fred,或者结尾是barney 时匹配上。很可能程序员想要的是(^(fred|barney)$),这将匹配只有fred 或者只有barney的行◆。那/(wilma|pebbles?)/呢?问号也对前面的元素有效◆,它将匹配wilma, pebbles, 或者pebble,可能是某个长字符串的一部分(因为没有锚定)。
  ◆当然,结尾处可以有换行符,我们在早期讨论$锚定时提到过。
  ◆因为数量词?和字母s 结合更紧密 1.9      模式测试程序
  #! /usr/bin/perl while(){ #一次取一行输入
  chomp;
  if(/YOUR_PARTTEN_GOES_HERE/){
  print "Matched: |$`$'|\n"; #特殊的变量
  }else{
  print "no match: |$_|\n";
  }
分享到:
评论

相关推荐

    p6-ICal

    Raku 语言以其强大的文本处理能力和对正则表达式的高级支持而闻名,使得 "p6-ICal" 在处理复杂的 iCalendar 格式时能够提供高效且灵活的解决方案。 【标签】"Raku" 指的是这个项目使用了 Raku 编程语言。Raku(原名...

    Matlab Toolbox for Interval Type-2 Fuzzy Logic Systems.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    基于java的大学生第二课堂设计与实现.docx

    基于java的大学生第二课堂设计与实现.docx

    vue+SpringBoot442大学校园快递代取管理系统的设计与实现java毕业设计源码含论文.rar

    jdk版本:jdk1.8+ 前端:vue.js+ElementUI 开发工具:IDEA 或者eclipse都支持 编程语言: java 框架支持:springboot 数据库: mysql 版本不限 数据库工具:Navicat/SQLyog都可以 详细技术:java+springboot+vue+MYSQL+MAVEN 前端采用的Vue框架,后端采用java语言,sprinboot框架,mybatis操作数据源,使用软件:idea,eclipse、MySQL。完成了用户登录管理等模块的设计与实现。完成了系统数据库的设计,并基于MySQL数据库管理系统

    win和android安卓平台的播放器 .zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。

    application.properties

    application.properties

    【语音分离】通过分析信号的FFT,根据音频使用合适的滤波器进行语音信号分离Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    使用 javaEE,MySQL,jsp,jQuery,bootstrap,华为云搭建的小网站——奇异果物品管理平台(毕设&课设&

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。

    MATLAB 中的工具箱用于对架空和地下输电线路进行建模(单位长度参数、传播特性、频率扫描、瞬态模拟).rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    linux常用命令大全.docx

    linux常用命令大全

    罗彩琳23002374.cpp

    罗彩琳23002374.cpp

    基于ASP的房屋租售信息管理系统的设计(源代码+论文).zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看rEADME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    使用SSM框架, MySql数据库, 食疗药膳推荐系统(首次上传项目记录).zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。

    java基于ssm+vue学生奖惩管理系统源码 带毕业论文

    【资源说明】 1、开发环境:ssm框架;内含Mysql数据库;VUE技术 2、项目代码都经过严格调试,代码没有任何bug!下载可以直接使用! 3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 4、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。

    ASP网上购物系统的设计与实现(源代码+论文).zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看ReAdme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 、本项目3比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看ReAdme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通;、本项 3目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看ReAdme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    MES APP应用系统(一个基于ReactNative的工厂MES移动APP).zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。

    莱斯衰落信道下面向虚拟现实应用的无人机 MEC 系统的延迟优化matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    用于时间序列的通用深度自动编码器Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    1001001000000000000000000000000000000000000000

    1001001000000000000000000000000000000000000000

    基于QT的缺陷检测系统,包括图像检测以及目标检测两个部分,支持ONNXRuntime加速(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。

Global site tag (gtag.js) - Google Analytics