gdrocket 发表于 2018-8-31 09:05:59

perl正则的命名捕获与匹配变量使用

  今天说的也算是perl正则表达式的一两点高级特性--命名捕获与匹配变量,如果能够掌握的话,对于提升能力和效率都有帮助。
  


[*]#!/usr/bin/perl -w
[*]=pod
[*]命名捕获--给匹配上的内容加上标签
[*]捕获到的内容都会保存在%+散列中,这个散列的key为对应的标签;
[*]方便之处就是利于程序扩展和阅读,不用繁琐的一个一个去数括号来获取匹配变量
[*]=cut
[*]use strict;
[*]my $str = "jack and rose";
[*]if ($str =~ /(?\S+) (and|or) (?\S+)/) {
[*]    my ($first, $second) = ($+{first}, $+{second});
[*]    print "$first\n$second\n";# jack, rose
[*]}
[*]
[*]my $str1 = "name:zt,age:19,fav:sport";
[*]if ($str1 =~ /(?\S+),age.+,(?\S+)/) {
[*]    my ($name, $fav) = ($+{name}, $+{fav});
[*]    print "$name, $fav\n";# name:zt, fav:sport
[*]}
[*]
[*]=pod
[*]匹配变量
[*]希望通过这个例子可以让没有应用过匹配变量的同学开始使用匹配变量,关于匹配变量的争议也很多,有人说它太慢
[*]不过对于动态语言来说,慢那么一点没多大影响,方便最重要, 尤其在用正则匹配替换标记语言时很方便,比如处理html或者xml文件
[*]=cut
[*]my $str2 = "happy new year!";
[*]$str2 =~ /new/;
[*]print
页: [1]
查看完整版本: perl正则的命名捕获与匹配变量使用