+ -
当前位置:首页 → 问答吧 → 【急】perl 贪婪提问

【急】perl 贪婪提问

时间:2011-03-10

来源:互联网

本帖最后由 zhongkeli 于 2011-03-10 19:52 编辑

#!/usr/bin/perl -w
use warnings;
use strict;


while(<DATA>){
    chomp;
print "$1\t$3\n"  while ($_ =~/\s(.*?)\s(flag)\s(.*?)\s/ig);

}

__DATA__
Justin Bieber  Selena Gomez walk the red Selena Gomez walk
问什么$1输出的是“Justin Bieber  Selena Gomez walk”
$2输出的是"red",因为这是非贪婪 所以应该$1输出的是“walk”,为什么不是这样的呢
如果把($_ =~/\s(.*?)\s(the)\s(.*?)\s/ig);
中的/ig的g去掉好会不断循环 怎么解决呢

作者: zhongkeli   发布时间: 2011-03-10

第一个问题 我没法回答。我觉的本来就应该这样。你的思维很特殊第一个\s确定了以后就不会再往前移了,除非后面的不匹配。

把g去掉了 就只发生一次匹配 ($_ =~/\s(.*?)\s(the)\s(.*?)\s/ig) 的返回值永远是1.相当于while(1)。 改成if

作者: ziyunfei   发布时间: 2011-03-10

我匹配flag前一个单词,但是不行,只能匹配flag后面的一个单词,如果要匹配flag前一个单词,怎么做呢

作者: zhongkeli   发布时间: 2011-03-10