正则表达式--处理文本

-1-----------------------------------------------------------------------------------------------------------------
用s///进行替换
   s/// 找查并替换

   $_="test meng";
   if(s/test/wang/) #查找并test并将其替换wang
   {
       print "$_\n";  
   }


 用/g全局替换

   /g修饰符可让s///进行所有可能的,不重复的替换

   $_="home, sweet home!";
   s/home/cave/g;
   print "$_\n";  #print cave, sweet home!.


   s/^\s+//;  #将开头的空白字符替换成空白字符串
   s/\s+$//;  #将结尾的空白字符替换成空白字符串
   s/^\s+|\s+$//g;  #将开头和结尾的空白字符串替换成空白
-1-----------------------------------------------------------------------------------------------------------------


-3-------------------------------------------------------------------------------------
不同的界定符:
  s#^https://#http://#;
  s{fred}{barney};
  s[fred][barney];
  s<fred><barney>;


  绑定操作符:
    $file =~ s#^.*##;

 无损替换:
  my $orginal ='Fred ate 1 rib';
  my $copy = $orginal;
  $copy =~ s/\d+ rib/10 rib/;

 大小写转换:
   $_ = 'I saw Barney with Fred';
   s/(Fred|Barney)/\U$1\E/gi;  #BARNEY FRED

   $_='Fred BARNEY';
   s/(Fred|BARNEY)/\L$1\E/;  #barney fred


-3-------------------------------------------------------------------------------------

-4-------------------------------------------------------------------------------------
split操作符:
  它会根据字符串的模式来拆分字符串,对于制表符,冒号,空白或任意符号分隔不同的字段数据
  的字符串来说,用这个操作符分解提取相当方便。

  my @fields = split /separator/,$string;

  my @fields = split /:/,"abc:def:g:h"; #result is qw(abc def g h);

  如果两个连续的分隔符连在一起,就会产生空字段:
  my @fields = split /:/,"abc:def::g:h";  #result is ('abc','def','','g','h')

  也可以利用split的/\s+/模式根据空白符分隔字段,该模式把所有连续空白视作单单个空格并以
  此切割。
  my $some="This   is a \t    test.\n";
  my @test = split /\s+/,$some;

  默认split会以空白符分隔$_中的字符串:
  my @t = split;   #等效于split /\s+/,$_;

-4-------------------------------------------------------------------------------------


-5-------------------------------------------------------------------------------------
join函数
  与split用法相反,join是把这些片段接合成一个字符串,join用法如下:
  my $result = join $glue,@pieces;

  my $x = join ":",4,6,8,10.12; #$x result is "4:6:8:10:12"


-5-------------------------------------------------------------------------------------



-6-------------------------------------------------------------------------------------
非贪婪量词:
  正则表达式引擎会一直行上述的回溯动,不断以不同的方式调整模式匹配内容来适应字符串,
  直到最后找到一个整体匹配成功为止,要要直到最后都找不到宣告失败。

  好繁琐。。。。


  非贪婪量词:
    ?
    +? #只匹配一次


 跨行的的模式匹配:
 $_="I'm much better\nthan Barney is\nat bowling,\nWilma.\n";

 if(/^wilma\b/im)
 {
    print "matched\n";
 }

 一次更新多个文件:

   更新多个文件肯定是要备份源文件,避免操作失误可以进行还原。可以特殊变量来进行备份文件:
    $^I 

  #!/usr/bin/perl
  use strict;
  chomp(my $date=`date`);
  $^I='.bak';
  while(<>)
  {
     s/test/hello/;
     s/phone//;
     print ;
  }

  从命令行直接编辑:
   perl -p -i.bak -w -e 's/test/laomeng/g' test*.data


-6-------------------------------------------------------------------------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值