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

[经验分享] Perl中的正则表达

[复制链接]

尚未签到

发表于 2015-12-28 08:31:46 | 显示全部楼层 |阅读模式
  前几天用到了Perl语言,主要看了一下Perl中的正则表达式,在各种网页语言中,正则表达式在处理字符串的时候十分有用,所以这里就简单说一下在Perl中正则表达式的应用。
  先上代码



1 #!/usr/bin/perl -w
2 #use utf8;
3 #use encoding "gb2312";
4
5 open(DATA,"<test2.txt") or die "read error";
6
7 open(OUT,">outfile.txt") or die "write error";
8 %array=();
9 while ($string =<DATA>){
10   
11   if ($string =~ /s.*.m/) {
12     $string =~ s/s.*.m//g;
13     
14   }
15   chomp($string);     #去掉换行符
16     foreach $character(split / /,$string){
17     if ($character =~ /\/d$/)
18     {
19         $array{$character}++;
20     }#code
21   }
22 }
23 print OUT "result:\n";
24 @character = sort {$array{$b} <=> $array{$a} }( keys %array);
25 foreach $character (@character){
26     print   OUT "$character => $array{$character}\n";
27 }
  简单说一下就是,读取文件内容到字符串,去掉换行符,按空格分割(spilt),匹配到以s开头,以m结束的字符串,然后以空串替换之(删除),匹配到以d结束的字符串,存到数组中,最后按降序输出到文件。实际就是删除s开头,m结尾的单词,找到所有以d结束的单词,并统计。
  这里使用关联数组进行统计,可以使用任意标量(keys)作为索引值,便于以后检索。
   值得注意的是,*是贪婪匹配,它会尽可能地向后匹配直到匹配成功,要想尽可能少地匹配,需要
  



$string =~ s/s.*?.m//g

  
  正则表达式
  (1)三种形式
  匹配:m/<regexp>;/ (还可以简写为 /<regexp>;/ ,略去 m)
    替换:s/<pattern>;/<replacement>;/
    转化:tr/<pattern>;/<replacemnt>;/
    这三种形式和“=~”或“!~”搭配使用,分别表示匹配和不匹配,在上述代码中用到了匹配符号。
       (2)常用模式(pattern)  
  . 匹配除换行符以外的所有字符
  
  x? 匹配 0 次或一次 x 字符串
  
  x* 匹配 0 次或多次 x 字符串,但匹配可能的最少次数
  
  x+ 匹配 1 次或多次 x 字符串,但匹配可能的最少次数
  
  .* 匹配 0 次或一次的任何字符
  
  .+ 匹配 1 次或多次的任何字符
  
  {m} 匹配刚好是 m 个 的指定字符串
  
  {m,n} 匹配在 m个 以上 n个 以下 的指定字符串
  
  {m,} 匹配 m个 以上 的指定字符串
  
  [] 匹配符合 [] 内的字符
  
  [^] 匹配不符合 [] 内的字符
  
  [0-9] 匹配所有数字字符
  
  [a-z] 匹配所有小写字母字符
  
  [^0-9] 匹配所有非数字字符
  
  [^a-z] 匹配所有非小写字母字符
  
  ^ 匹配字符开头的字符
  
  $ 匹配字符结尾的字符
  
  \d 匹配一个数字的字符,和 [0-9] 语法一样
  
  \d+ 匹配多个数字字符串,和 [0-9]+ 语法一样
  
  \D 非数字,其他同 \d
  
  \D+ 非数字,其他同 \d+
  
  \w 英文字母或数字的字符串,和 [a-zA-Z0-9] 语法一样
  
  \w+ 和 [a-zA-Z0-9]+ 语法一样
  
  \W 非英文字母或数字的字符串,和 [^a-zA-Z0-9] 语法一样
  
  \W+ 和 [^a-zA-Z0-9]+ 语法一样
  
  \s 空格,和 [\n\t\r\f] 语法一样
  
  \s+ 和 [\n\t\r\f]+ 一样
  
  \S 非空格,和 [^\n\t\r\f] 语法一样
  
  \S+ 和 [^\n\t\r\f]+ 语法一样
  
  \b 匹配以英文字母,数字为边界的字符串
  
  \B 匹配不以英文字母,数值为边界的字符串
  
  a|b|c 匹配符合a字符 或是b字符 或是c字符 的字符串
  
  abc 匹配含有 abc 的字符串
  
  在匹配中要注意转义字符的使用。正则表达式在处理字符时给我们提供很多便利,这里只是介绍了最简单的使用,并且发现字符串中隐含的模式进行匹配也是需要我们注意的,以后还要在使用中多多地学习。
  

运维网声明 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-157229-1-1.html 上篇帖子: perl 模块 下篇帖子: Perl小说抓取脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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