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

[经验分享] Perl入门(四)Perl的正则表达式

[复制链接]

尚未签到

发表于 2018-8-30 10:28:55 | 显示全部楼层 |阅读模式
  正则表达式是Perl语言的特色,基本的语法不是很难,但是编写一个符合需求、高效的正则表达式,还是有一些挑战的。
  Perl的三种匹配模式
  1.查找
  语法:m/正则表达式内容/;
  作用:查找匹配内容中是否包含"正则表达式内容",如果包含返回1,否则返回0;
  [python] view plain copy
  #!user/bin/env perl -w
  #1...
  $str1 = "i like perl";
  $result1 = ($str1 =~ m/perl/);
  print "$result1 $str1\n";
  2.替换
  语法:s/正则表达式内容/替换内容/;
  作用:查找匹配内容中是否包含"正则表达式内容",如果包含,使用"替换内容"替换,返回1,否则,返回0;
  补充:正常情况下,如果匹配内容包含多个可匹配项,此语法只会匹配第一个,然后替换返回。
  1.【真正表达式内容】可以使用()进行包含,这样做,可以在【替换内容】中使用$1,$2...进行引用,1、2为括号的顺序
  2.Perl提供模式修饰词。修饰词同样适用于查找模式。
  在替换语法后面添加g。表示替换所有匹配项
  在替换语法后面添加e。表示替换内容需要先进行计算后再进行替换操作
  在替换语法后面添加i。表示忽略大小写
  在替换语法后面添加s或m。表示允许存在换行符(\n)
  [python] view plain copy
  #2... 使用love替换like
  $str2 = "i like perl like i";
  $result2 = ($str2 =~ s/like/love/);
  print "$result2 $str2\n";
  #2...1 使用g替换所有like
  $str2_1 = "i like perl like i";
  $result2_1 = ($str2_1 =~ s/like/love/g);
  print "$result2_1 $str2_1\n";
  #2...2 使用e告诉perl替换内容要先计算在替换
  $str2_2 = "you should pay \$22 for this mechine!";
  $result2_2 = ($str2_2 =~ s/(22)/$1*2/e);
  print "$result2_2 $str2_2\n";
  3.转换
  语法:tr/匹配内容集合/替换内容集合/;
  作用:首先,匹配内容集合中元素会和替换集合中元素一一对应起来,然后执行匹配操作,匹配上的内容使用对应的退换集合中内容进行替换,返回转换元素个数.
  补充:
  转换模式不能使用正则表达式和变量替换。
  如果【匹配内容集合】元素个数比【替换内容集合】元素多,多出的元素都会对应到【替换内容集合】的最后一个元素。
  如果【匹配内容集合】元素个数比【替换内容集合】元素少,忽略【替换内容集合】中多余的元素
  [python] view plain copy
  #3... 将小写转换成大写
  $str3 = "abcdefghijklmnopqrstuvwxyz";
  $result3 = ($str3 =~ tr/a-z/A-Z/);
  print "$result3 $str3\n";
  #3...1 匹配内容集合元素多于替换内容集合元素
  $str3_1 = "abcdefghijklmnopqrstuvwxyz";
  $result3_1 = ($str3_1 =~ tr/a-z/A-Y/);
  print "$result3_1 $str3_1\n";
  #3...2 匹配内容集合元素少于替换内容集合元素
  $str3_2 = "abcdefghijklmnopqrstuvwxyz";
  $result3_2 = ($str3_2 =~ tr/a-y/A-Z/);
  print "$result3_2 $str3_2\n";
  运算结果为
  [python] view plain copy
  1 i like perl
  1 i love perl like i
  2 i love perl love i
  1 you should pay $44 for this mechine!
  26 ABCDEFGHIJKLMNOPQRSTUVWXYZ
  26 ABCDEFGHIJKLMNOPQRSTUVWXYY
  25 ABCDEFGHIJKLMNOPQRSTUVWXYz
  Perl的绑定操作符
  上面的例子中已经使用了"=~"绑定操作符,绑定操作符的作用就是将【需要匹配的内容】和【匹配模式】绑定,然后进行计算。
  绑定操作符有:
  =~ : 英文【does】 表示满足匹配模式
  !~ : 英文【doesnt】表示不满足匹配模式
  正则表达式的元字符
  元字符是正则表达式组成的基本元素。(下面这个表是从资料里面copy来的.手打累死的说)
  字符  描述
  \   将下一个字符标记为一个特殊字符、或一个原义字符、或一个 后向引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\' 匹配 "\" 而 "(" 则匹配 "("。
  ^   匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。
  $   匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。

  • 匹配前面的子表达式零次或多次。例如,zo 能匹配 "z" 以及 "zoo"。 等价于{0,}。
  • 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。  ?   匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
      {n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
      {n,}    n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o'。
      {n,m}   m 和 n 均为非负整数,其中n

运维网声明 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-558812-1-1.html 上篇帖子: Perl入门(一)Perl的基本类型及运算符 下篇帖子: Perl入门(五)Perl文件读写
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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