繁体   English   中英

需要Perl正则表达式

[英]Perl Regular Expression Needed

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

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);
}

但这并不能很好地工作。

谢谢您的帮助。

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

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

正则表达式可视化

尽管在包括'"类的路径上失败,例如slideshowimages("images/image'1'.jpg") 。可以处理这种情况的表达式是:

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

正则表达式可视化

my @images = $html =~ /["'] (.+?) ["']/gx; # /g for multiple hits on a line
/(["']).*?\.(jpg|gif|png|bmp|swf)\1/

您需要捕获所使用的内容(单引号或双引号),然后再返回引用。
另外,您需要将扩展​​名的选择分组。 否则,您说的是“以jpg或以纯gif(,png等)结尾的任何东西”。


调整@mpapec的答案:

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

(在文件名中禁止使用“和”也是一个好主意)。

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-捕获单引号或双引号

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM