[英]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
需要注意的是:
到目前為止,我已經嘗試過:
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.