1. 程式人生 > >正則表示式提取HTML中IMG標籤的SRC地址

正則表示式提取HTML中IMG標籤的SRC地址

一般來說一個 HTML 文件有很多標籤,比如“<html>”、“<body>”、“<table>”等,想把文件中的 img 標籤提取出來並不是一件容易的事。由於 img 標籤樣式變化多端,使提取的時候用程式尋找並不容易。於是想要尋找它們就必須寫一個非常健全的正則表示式,不然有可能會找得不全,或者找出來的不是正確的 img 標籤。
我們可以從 HTML 標籤的格式去想應該怎麼建這個正則表示式。首先要想一下 img 標籤有幾種寫法,忽略大小寫不看的話,下面列出 img 標籤可能出現的幾種情況。
<img> <img/> <img src=/>
這一些標籤不用考慮,因為沒有圖片資源地址。
<img src = /images/pic.jpg/ > <img src =" /images/pic.jpg" > <img src= '/images/pic.jpg ' / >
這一些標籤都有圖片資源地址,另外還有一個特點就是有引號對,可能為單引號,也可能為雙引號。因為不需要同時匹配引號對,所以正則表示式可以這麼寫:@"<img\s*src\s*=\s*[""']?\s*(?[^\s""'<>]*)\s*/?\s*>"
<img width="320" height="240" src=/images/pic.jpg onclick="window.open('/images/pic.jpg')">
因為 img 和 src 之間可能會有其他的引數,所以“<img”要有個單詞結束,比如說不能是“<imgabc”,同樣 src 前面也是一樣,使用單詞結束符“\b”有一個好處就是省去了表示空格的“\s*”。另外由於 img 標籤中不可以出現“<”、“>”這樣的符號,所以要改寫前面的正則表示式:@"<img\b[^<>]*?\bsrc\s*=\s*[""']?\s*(?<imgUrl>[^\s""'<>]*)[^<>]*?/?\s*>"
<img width="320" height="240" src = "
/images/pic.jpg" />
像這種可能會用回車符折行的問題有時候會出現,所以在有空格分開的地方要包含回車換行和 TAB 字元,另外在圖片地址中不能出現空格、TAB、回車和換行字元。
所以上面的正則表示式可以改成:@"<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?<imgUrl>[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>

"
下面寫出取得HTML中所有圖片地址的靜態方法。

01./// <summary>    
02./// 取得HTML中所有圖片的 URL。    
03./// </summary>    
04./// <param name="sHtmlText">HTML程式碼</param>    
05./// <returns>圖片的URL列表</returns>    
06.public static string[] GetHtmlImageUrlList(string sHtmlText)   
07.{   
08.  // 定義正則表示式用來匹配 img 標籤    
09.  Regex regImg = new Regex(@"<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?<imgUrl>[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>",   RegexOptions.IgnoreCase);   
10.    
11.  // 搜尋匹配的字串    
12.  MatchCollection matches = regImg.Matches(sHtmlText);   
13.  int i = 0;   
14.  string[] sUrlList = new string[matches.Count];   
15.    
16.  // 取得匹配項列表    
17.  foreach (Match match in matches)   
18.  sUrlList[i++] = match.Groups["imgUrl"].Value;   
19.  return sUrlList;   
20.}  

相關推薦

C#表示式提取HTMLIMG標籤SRC地址

原文:http://blog.csdn.net/smeller/article/details/7108502 一般來說一個 HTML 文件有很多標籤,比如“<html>”、“<body>”、“<table>”等,想把文件中的 img 標籤提取出來並不

表示式提取HTMLIMG標籤SRC地址

一般來說一個 HTML 文件有很多標籤,比如“<html>”、“<body>”、“<table>”等,想把文件中的 img 標籤提取出來並不是一件容易的事。由於 img 標籤樣式變化多端,使提取的時候用程式尋找並不容易。於是想要尋找它們就

java表示式去除html所有的標籤和特殊HTML字元

關於java正則表示式去除html中所有的標籤和特殊HTML字元,結合我所做的專案總結的經驗: 總共分為三種:第一種適用於適用短的文章,將文章用正則表示式的方式拼接到程式碼中,有些繁瑣,其實不太實用。第二種就是直接將文件引入,進行更改,但是有一個小缺點,就是文件中的格式可能是utf-8格式的

java利用表示式提取字串的整數和小數部分

最近開發遇到一個新的東西,就是前端傳過來一個字串,需要將裡面的數字提取出來,倒騰了一天,最後還是沒有倒騰出來,最後還是借鑑大佬的方法。記錄一下。 首先是前端傳來的字串“小明通過掃碼向你付款100000.566元”其中暱稱和金額不是固定的,其他是固定的。 於是便考慮使用“通過掃碼向你付

表示式提取專案所有帶IP的網址

假如現在需要在整個專案中搜索所有帶IP的網址,例如webService釋出地址呀這樣的, 隨便舉個栗子 http://127.0.0.1:8080/XXXXX/services/AService

表示式提取URL的檔名和替換

完整的實現替換如下:string temp="http://localhost:2045/glietnet/image/news/news20060414105529.jpg";string tem

php使用表示式提取字串尖括號、小括號、括號、大括號的字串

</pre><p>PHP使用正則表示式提取字串中尖括號<>、小括號()、中括號[]、大括號{}中的字元示例,需要的朋友可以參考下</p><p>

HTMLimg標籤src路徑的值需要設定成一個變數來表示

在Java開發中,有時候會遇到在顯示圖片時不需要給圖片的src路徑設定成固定的,而是需要寫入從後臺資料庫傳入的路徑變數,下面給出瞭解決此問題的方法。<script> var pictureUrl = data.url;//後臺傳入的圖片路徑,url指的是資料

js 表示式去除html字元所有的標籤img標籤除外)

廢話不多說,直接上程式碼:description.replace(/<(?!img).*?>/g, ""); 如果保留img,p標籤,則為:description.replace(/<

Java呼叫replaceAll方法通過表示式HTML字串img標籤src預設屬性值uri補全

class Test { public static void main(String[] args) { String domain = "http://avatar.csdn.net";

Java表示式去除html標籤

    注:這是Java正則表示式去除html標籤方法。     private static final String regEx_script = "<script[^>]*?>[\\s\\S]*?<\\/script>"; // 定義sc

表示式提取imgsrc資料

分享了正則表示式提取img的src的方法,一起來了解下。 要匹配的字串:<img src=image/ad1.gif width="128" height="36"/><img src='image/ad2.gif' width="128" height=

表示式替換HTML標籤小寫為大寫

c#在獲取游標時focus方法和select方法有什麼不同呢datagridview的列的DefaultCellStyle.Format設定問題c#在獲取游標時focus方法和select方法有什麼不同呢datagridview的列的DefaultCellStyle.Form

表示式匹配HTML標籤

<script> //匹配HTML標籤 方法一: var str = '<p class="odd" id="odd">123</p>'; var pattern = /<\/?[a-zA-Z]+(\s+[a-zA-

python表示式從字串提取數字

python從字串中提取數字 使用正則表示式,用法如下: ## 總結 ## ^ 匹配字串的開始。 ## $ 匹配字串的結尾。 ## \b 匹配一個單詞的邊界。 ## \d 匹配任意數字。 ## \D

python 表示式去除文字標籤內容

print re.sub("<[^>]*>","",text) 輸出正確結果,而 print t.replace("<[^>]*>","")不能輸出正確結果 import re t = "<text>jsdkjfsgn&l

html字串去除標籤,字串利用表示式去除html標籤

html字串是儲存在伺服器的s='<li><a href="http://www.waiqin365.com/p-page-293.html">標題<span class="new">new</span></a>&l

js表示式去除HTML標籤

1,得到網頁上的連結地址: string matchString = @"<a[^>]+href=\s*(?:'(?<href>[^']+)'|""(?<href>[^""]+)""|(?<href>[^>\s]+))\s*[^>]

jmetermail reader sampler郵件層級多,表示式提取器(regular expression extror)無法提取,使用BeanShellPostProcessor解決

問題描述: 1、jmeter通過“MailReader Sampler”連線伺服器,將傳送到郵箱的包含註冊驗證碼郵件下載到jmeter中,在郵件中提取驗證碼,進行後續註冊驗證,即: 2、使用“正則表示式提取器”進行驗證碼提取: 結果無法取到驗證碼; 3、使用“Bea

表示式替換 html 標籤

/** * 此方法描述的是:字串的替換 * @param string 需要替換的字串 * @param oldString 被替換的字串 * @param newString 新字串 * @author 作者 E-mail: [em