perl 如何取出一行中匹配到第2次的字段?

perl 如何取出一行中匹配到第2次的字段?

假如我有一行文本: “the first file is abc.jpg the second file is cba.jpg the third file is bac.jpg and"

我现在如何用模式来取出第2个jpg文件的文件名 cba.jpg 呢?

那位兄弟知道的帮帮忙。



[Copy to clipboard] [ - ]
CODE:
my $str='the first file is abc.jpg the second file is cba.jpg the third file is bac.jpg and';
if($str=~/\.jpg.*?(\w+\.jpg)/){
    print 'filename is ',$1;
}



QUOTE:
原帖由 __lxmxn__ 于 2008-3-13 16:48 发表
my $str='the first file is abc.jpg the second file is cba.jpg the third file is bac.jpg and';
if($str=~/\.jpg.*?(\w+\.jpg)/){
    print 'filename is ',$1;
}

谢谢阿。这个方便。

我当时是用笨的方法,直接把那行打散,放入数组,再把有jpg的放入另外一个数组,然后取出array[1] 的值。
还要再请教下:
1,如何取出倒数第2个jpg的文件名?

2,以及取出所有的jpg文件名?

3,或者任意指定的一个? 比如第4个,或者第8个?


[Copy to clipboard] [ - ]
CODE:
#!perl -w
print "输入jpg文件名的序号,倒序的使用负数表示:\n";
my $select=<STDIN>;
chomp $select;
my $str='the first file is abc.jpg the second file is cba.jpg the third file is bac.jpg and def.jpg the end';
my @jpgarray=($str=~/[^\W]*\.jpg/g);
if($select<0){
    print "FileName is $jpgarray[$select]\n";
}else{
    print "Filename is $jpgarray[--$select]\n";
}

zhuangbility的写法

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl
use strict;
use warnings;
my $index = shift || 0;
my $data = "the first file is abc.jpg the second file is cba.jpg the third file is bac.jpg and ";
print +($data =~ /(\w+\.jpg)/g)[$index],"\n";



QUOTE:
<lig@other-server:~/chinaunix>$ ./match
abc.jpg
<lig@other-server:~/chinaunix>$ ./match 1
cba.jpg
<lig@other-server:~/chinaunix>$ ./match 2
bac.jpg
<lig@other-server:~/chinaunix>$ ./match -1
bac.jpg
<lig@other-server:~/chinaunix>$ ./match -2
cba.jpg