找回密码
 注册
查看: 9212|回复: 1

perl语言正则表达式列表上下文中的m//

[复制链接]
发表于 2011-11-14 20:53:17 | 显示全部楼层 |阅读模式
当使用split 时,模式指定了分离符:这一部分不是有用的数据。有时指定要保留的部分更容易。
在列表context 中使用模式匹配(m//)时,如果匹配成功返回值为内存变量值的列表;如果匹配失败则为空列表:
$_ =“Hello there, neighbor!”;
my($first, $second, $third) =/(\S+) (\S+), (\S+)/;
print “$second is my $third\n”;
这种方法使我们可以给这些匹配的变量以合适的名字,这些值不会由于下次模式匹配而被覆盖(由于代码中没有=~,模式会
自动(默认行为)和$_进行匹配)
在s///中介绍的/g 修饰符也可在m//中使用,它允许你在字符串中的多处进行匹配。在这里,由括号括起来的模式将在每一
次匹配成功时返回其内存中所存放的值:
my $text = “Fred dropped a 5 ton granite block on Mr. Slate”;
my @words = ($text =~ /([a-z]+)/ig);
print “Result: @words\n”;
#Result: Fred dropped a ton granite block on Mr slate
这同使用split 有些类似。这里不是指定我们要去掉的部分,而是指定我们要保留的部分。
如果有不止一对括号,每一次返回不止一个字符串。例如将字符串放入hash 中,如下:
my $data = “Barney Rubble Fred FlintstoneWilma Flintstone”;
my %last_name = ($data =~ / (\w+)\S+(\w+)/g);
每当模式匹配成功时,将返回一对值。这些一对一对的值就成了hash 中的key/value 对。
回复

使用道具 举报

发表于 2012-4-15 16:17:32 | 显示全部楼层
都是xiaoliu 哈
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-11-21 16:39 , Processed in 0.020997 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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