Perl学习笔记 No.9

来源:互联网 发布:我杀了他 知乎 编辑:程序博客网 时间:2024/05/18 03:24

使用正则表达式处理文件

1.   s///,s/abc/fred/  先匹配abc,如果匹配上,使用fred替换abc;如果没有匹配上,则什么都不做

2.   s///g,全局替换,s/abc/fred/g,将所有abc都替换成fred

3.   可以使用其他符号替代/作为分隔符

4.    /six同样适用

5.    $_ = “I saw Barney with Fred.”;
       $_ =  s/(fred|barney)//U$1/gi;                    # 现在是 “I saw BARNEY with FRED.”

       /U后面的全部大写,同理,/L后面的全部小写,要终止效果,使用/E

6.    /l和/u只针对后面的一个字符

7.    /u/L 连用,表示第一个字母大写,其他小写

8.    以上修饰符也可以在print语句的""中使用

9.    split不能分割用,逗号隔开的数据...0.0

10.  split将模式与字符串比较,将由 分离符所分隔开的子串作为列表返回回来.比如,@fields = split/:/,"abc:def:g:hij";

11.  如果两个分隔符连续出现,则会返回空元素,但结尾的空元素被丢弃

12.   默认时,split 对 $_操作,模式为空白.my @fields = split; #相当于 split//s+/,$_;但是也有区别,就是会将开头的空元素丢弃

13.   join函数,my $x = join “:”, "4, 6, 8, 10, 12"; #$x 为 4:6:8:10:12

14.   如果第二个参数只有一个或没有元素,则只返回一个或空

15.   切记join第一个参数为字符串,而不是模式

16.   在列表上下文中,匹配表达式返回的也是列表

        my $text = "I love you!I love my city!";

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

        print "@result/n"; #输出: I love you I love my city

17.  如果不止一个括号,则每次返回不只一个字符串.例如把字符串放到hash中:

        my $data = "Barney Rubble Fred Flintstone Wilma Flintstone";

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

        每当模式匹配成功,则返回一对值,成为hash的key/value

18.   非贪婪数量词...前面讲到的+,*,?,{}都是贪婪数量词,就是先吃再吐(回退).非贪婪的,就是先匹配再吃.具体效率其实与数据相关.

19.   +?,*?,{}?,?? 就是全部非贪婪数量词

20.   /m修饰符,用于处理多行字符串(有多个换行符)

21.   $^I 此标量的值,可以决定while(<>)备份文件的类型,比如 $^I = ".bak";或者$^I="~";

22.   在开括号(后面加上?:,表示这个括号只分组,不引起内存变量的分配

原创粉丝点击