设为首页 收藏本站
查看: 1085|回复: 0

[经验分享] perl学习日记7正则表达式

[复制链接]

尚未签到

发表于 2017-5-19 08:53:04 | 显示全部楼层 |阅读模式
  1.正则表达式
  1.1什么是正则表达式?
  我们将正则表达式看作一种由简单语言实现的程序,这种语言只有一个任务:查找某个字符串,返回"匹配上(it matches)"或者"不匹配(it doesnot match)"。这就是它完成的所有工作。 1.2使用简单的模式
  $_ ="yabba dabba doo"; if(/abba/){ print "It matched!\n"; } 所有在双引号中的转义字符在模式中均有效,因此你可以使用/coke\tsprite/来匹配11 个字符的字符串coke, tab(制表符),sprite。 1.2.1.元字符
  点(.)是通配符,它可以匹配任何单个的字符,但不包括换行符("\n")
  如果只希望点(.)匹配句号,可以使用反斜线。这条规则对Perl 正则表达式中所有元字符均有效:元字符前使用反斜线将使它变成普通的字符。如,模式/3\.14159/中的点(.)即不是通配符。 1.2.2.简单的量词
  星号(*)表示匹配前一项0次或者多次。因此,/fred\t*barney/将匹配上fred 和barney
  之间有任意个制表位(tab)的字符串。它可以匹配"fred\tbarney",其间有一个tab;匹配"fred\t\tbarney",其间有两个制表位;"fred\t\t\tbarney"其间有三个制表位;"fredbarney",其间什么也没有。其间可以是任意个制表符,但不能是其它的字符。
  因此.*将匹配任意字符任意多数,这就是说模式/fred.*barney/将匹配fred,和barney 之间有任意多个任意字符(不含换行符)的字符串
  加(+)也是。加(+)的意思是可以匹配前面一项的一个或多个:/fred +barney/意思是fred 和barney 之间由空格分开,且只能是空格
  问号(?),其含义是前面一个项出现一次,或者不出现。也就是说,前面这个项出现1 次或者0 次,此外不会有其它情况。因此,/barm-?bamm/只匹配:bamm-bamm 或bammbamm。
  1.2.3.模式中的分组
  括号(())用来表示分组,模式/(fred)+/能匹配上像fredfredfred 这样的字符串,这更可能是你所希望的。那么模式/(fred)*/呢?它将匹配上像hello,world 这样的字符串 1.2.4.选择符
  竖线(|),在这种用法中通常被读作"或(or)",意思是匹配左边的或者右边的。因此,/fred|barney|betty/将匹配出现过fred,或者barney,或者betty 的字符串。
  模式/fred (and|or) barney/能匹配如下两种字符串:fred and barney, fred or barney 1.2.5.字符类
  方括号[]中的一列字符,可以匹配上括号内出现的任意单个字符。
  例如,字符类[abcwxyz]可以匹配上括号内七个字母中的任意一个。为了方便,我们可以使用连字号(-)来表示某个范围的字母,因此上例也可以写做[a-cw-z]。上面例子省略的字符不多,但像[a-zA-Z]将非常方便,你可以使用和双引号相同的字符简写方法,例如类[\000-\177]可以匹配上任意的七比特的ASCII 字符
  $_ = "The HAL-9000 requires authorization to continue.";
  if(/HAL-[0-9]+/){
  print "The string mentions some model of HAL computer.\n";
  }
  [^def]将匹配上这三个字符中之外的任意单个字符。[^n\-z]将匹配上n, -, z 之外的任何字符。 1.2.6.字符类的简写
  任何数字的类,[0-9],可以被简写为:\d。刚才那个例子可以被写作/HAL-\d+/。
  \w 被称作"word'字符:[A-Za-z0-9_]
  模式/fred \w+ barney/将匹配fred,空格,一个"单词(word)",然后是空格和barney
  \s 对于匹配空白(whitespace)将非常方便。它等价于[\f\t\n\r ],其含5 个空白字符:格式符(form-feed);制表符(tab),换行符,回车,以及空格符 1.2.7.简写形式的补集
  你可以使用[^\d], [^\w], 和[^\s],其含义分别是,非数字的字符,非word(记住我们对word 的定义)的字符,和非空白的字符。也可以使用它们对应的大写形式:\D, \W, \S 来完成。
  另一个类字符[\d\D],它的意思是任何数字,和任何非数字,则意指任何字符。甚至包括换行符,而点(.)匹配除换行符以外的任何字符。
  而[^\d\D]则完全没用,因为它匹配既非数字也非非数字的字符,那什么也不是。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-378929-1-1.html 上篇帖子: Perl学习笔记-列表和数组 下篇帖子: perl正则表达式匹配中文
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表