Perl基础 第九章

1. s///g  全局替换

    s/\s+/ /g     将字符串中所有的不规则空格都按空格输出

    s/^\s+|\s+$//g     去掉字符串开头和结尾的空格

2. s///sixg

    i忽略大小写,s表示模式为数字,x表示忽略模式中的空格

3. 同样支持绑定操作符: =~

4. 大小写转换:

    $_ = "I saw Barney with Fred";

    s/(fred|barney)/\U$1/gi   # "I saw BARNEY with FRED"  \U表示紧接着的都大写

    s/(fred)|barney/\L$1/gi   #  "I saw barney with fred"    \L表示紧接着的都小写

    s/(\w+) with (\w+)/\U$2\E with $1/i  # "I saw FRED with barney"   \E表示大小写到此结束

    s/(fred|barney)/\u$1/ig    #  "I saw FRED with Barney"  \u表示紧跟着的一个字母大写

    s/(fred|barney)/\u\L$1/ig  #  "I saw Fred with Barney"  \u\L连着写表示第一个字母大写,后面小写


$_ = "Hello there, neighbor!";

my($first, $second, $third) = /(\S+) (\S+),(\S+)/    默认找$_匹配

print "$second is my $third\n";


my $text = "Fred dropped a 5 ton granite block on Mr.Sal";

my @words = ($text =~ /([a-z]+)/ig);

print "Result: $words\n";


my %last_name = ($data =~ /(\w+)\S+(\w+)/g);


#! /usr/bin/perl -w

use strict;

chomp(my $date = 'date');
$^I = ".bak";
while(<>){
    s/^Author:.*/Author:Randal/;
    s/^Phone:.*\n//;
    s/^Date:.*/Date:$date/;
    print;
}
由<>所得到的文件列表来源于命令行,主循环读入,更新,输出每一行--这里只是输出,但不会修改文件本身。但这并不是我们所期望的,我们期望的是还能写回文件/或者这么说希望的是修改文件。如何才能写回文件呢? $^I 当我们定义了$^I,<>会变得有些特殊。<>神奇的特点:如果没有指定文件名,则 从标准输入流中自动打开和关闭一系列的文件进行读入。但如果定义了$^I,那么$^I所定义的字符串会成为备份文件的扩展名.


同样的功能可以直接使用perl命令执行

$perl -p -i.bak -w -e 's/Randall/Randal/g' fred*.dat

非匹配括号: ?:

默认情况下 在匹配或者替换时,模式中被()引用的值会自动赋给$1,$2等变量,使用非匹配括号就可以避免这样的问题:

$str = "tangjiajia";

if($str =~ /(?:tang)jia(?:jia)/){ print $1, $2; } //会有warning说$1$2没有被定义


练习9.1写一个模式,它能匹配$what 当前的内容的 3 份连续拷贝。也就是说,如果$what 为 fred,则此模式能匹配 fredfredfred。如果$what 为 fred|barney,则此模式能匹配 fredfredbarney, barneyfredfred, barneybarneybarney,或者其它的变种。(提示:你应当在程序的顶端设置$what 的值,如 my $what = ‘
fred|barney’;)

#! /usr/bin/perl -w

$what = 'fred|tee';

while($_ = shift @ARGV){
    if(/($what){3}/){
        print $_;
    }
}



转载于:https://my.oschina.net/myeyes/blog/125039

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值