需要Perl正则表达式

时间:2013-11-07 14:34:03

标签: regex perl

我正在寻找一个Perl Regex来从以下代码中提取所有图像:

slideshowimages("images/image1.jpg","images/image2.png","images/image3.jpg")
slideshowimages('images/image4.jpg','images/image5.png','images/image6.jpg')

输出将是一个数组:

images/image1.jpg, images/image2.png, images/image3.jpg, images/image4.jpg, 
images/image5.png, images/image6.jpg

要注意的事项是:

  • 图片扩展名为.jpg / .png
  • 图像可以是单引号或双引号

到目前为止我尝试了什么:

while ($html =~ /["|'|=](.*\.jpg|gif|png|bmp|swf).*"/g) {
    my $item = $1;
    $item =~ s/\"|\'|=//g;
    push (@images, $item);
}

但这并没有真正奏效。

感谢您的帮助。

4 个答案:

答案 0 :(得分:2)

一个简单的正则表达式可能是:

["'][^'"]*[.](jpg|png)["']

Regular expression visualization

虽然在包括'"在内的slideshowimages("images/image'1'.jpg")路径上会失败。可以处理这种情况的表达式是:

('.*?\.(jpg|png)')|(".*?\.(jpg|png)")

Regular expression visualization

答案 1 :(得分:2)

my @images = $html =~ /["'] (.+?) ["']/gx; # /g for multiple hits on a line

答案 2 :(得分:1)

/(["']).*?\.(jpg|gif|png|bmp|swf)\1/

您需要捕捉您正在使用的内容,单引号或双引号,并参考该内容 此外,您需要对扩展程序的选择进行分组。否则,你说'任何以jpg结尾的东西或只是简单的gif(,png等)'。


调整@ mpapec的答案:

my @images = $html =~ /(["'])[^"']*?\.(jpg|gif|png|bmp|swf)\1/g;

(不允许“和”在文件名中也可能是一个好主意。)

答案 3 :(得分:1)

my $html = <<EOF;
slideshowimages("images/image'1'.jpg","images/image2.png","images/image3.jpg")
slideshowimages('images/image4.jpg','images/image5.png','images/image6jpg')
EOF

my @images = ();
while ($html =~ s/(["'])(.+?\/.+?\.(?:jpg|png|gif))\1//) {
    push @images, $2;
}
foreach my $image (@images) {
        print "$image, ";
}

这是一个更严格的限制因此它没有得到“images / image6png”

“images / image'1'.jpg”

没有失败

([“']) - 单引号或双引号(括号内的任何字符)和捕获

( - 开始捕捉

。+?/ - 一个或多个字符,直到第一个斜杠

。+? - 直到第一个时期的一个或多个字符

(?: - 开始分组而没有捕获

jpg | png | gif - 任何字符串

) - 没有捕获的结束分组

) - 结束捕获

\ 1 - 捕获单引号或双引号