Chinaunix

标题: perl 如何取出一行中匹配到第2次的字段? [打印本页]

作者: yang-wei    时间: 2008-03-13 16:08
标题: 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 呢?

那位兄弟知道的帮帮忙。

[ 本帖最后由 yang-wei 于 2008-3-13 16:09 编辑 ]
作者: __lxmxn__    时间: 2008-03-13 16:48
  1. my $str='the first file is abc.jpg the second file is cba.jpg the third file is bac.jpg and';
  2. if($str=~/\.jpg.*?(\w+\.jpg)/){
  3.     print 'filename is ',$1;
  4. }
复制代码

作者: yang-wei    时间: 2008-03-13 18:32
原帖由 __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] 的值。
作者: yang-wei    时间: 2008-03-14 10:35
标题: 回复 #3 yang-wei 的帖子
还要再请教下:
1,如何取出倒数第2个jpg的文件名?

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

3,或者任意指定的一个? 比如第4个,或者第8个?
作者: __lxmxn__    时间: 2008-03-14 11:34
  1. #!perl -w
  2. print "输入jpg文件名的序号,倒序的使用负数表示:\n";
  3. my $select=<STDIN>;
  4. chomp $select;
  5. 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';
  6. my @jpgarray=($str=~/[^\W]*\.jpg/g);
  7. if($select<0){
  8.     print "FileName is $jpgarray[$select]\n";
  9. }else{
  10.     print "Filename is $jpgarray[--$select]\n";
  11. }
复制代码

作者: churchmice    时间: 2008-03-14 13:00
标题: 回复 #1 yang-wei 的帖子
zhuangbility的写法

  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. my $index = shift || 0;
  5. my $data = "the first file is abc.jpg the second file is cba.jpg the third file is bac.jpg and ";
  6. print +($data =~ /(\w+\.jpg)/g)[$index],"\n";
复制代码

<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





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2