2013-11-07 5 views
1

Я ищу Perl Regex для извлечения всех изображений из следующего кода:Perl Regular Expression Необходимое

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
  • Има GE может быть внутри опалить или двойные кавычки

что я пытался до сих пор:

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

Но это не очень хорошо работать.

Благодарим за помощь.

ответ

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

@Bulletmagnet tnx для редактирования, но '/ m' полезен только для привязки ('^$ ') –

2

Простое выражение может быть:

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

Regular expression visualization

Он потерпит неудачу, хотя по дорожкам, включая ' или " как slideshowimages("images/image'1'.jpg"). Выражение, чем может обработать этот случай будет:

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

Regular expression visualization

+1

как вы сделали это изображение? –

+0

отличное изображение +1 ... –

+3

https://www.debuggex.com/ "embed on stackoverflow" – hexparrot

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

Вы должны захватить то, что вы используете, один или двойные кавычки, и отсылают к тому, что ,
Кроме того, вам необходимо сгруппировать свой выбор для расширения. В противном случае вы говорите «что-нибудь, заканчивающееся на jpg или просто gif (, png и т. Д.)».


Настройка @ ответ mpapec в:

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

(Запрет "и" в имени файла, вероятно, хорошая идея тоже)

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 - захваченной одиночные или двойные кавычки

+0

Моя первая мысль заключалась в том, что images/image'1'.jpg является невозможным именем файла, но оно не включено * nix - vi "image'1'.jpg" (хотя это смешно, имхо) –