簡體   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