[英]Regular expression to match img tag's url
這個正則表達式:
<IMG\s([^"'>]+|'[^']*'|"[^"]*")+>
給定此文本時似乎無休止地處理
<img src=http://www.blahblahblah.com/houses/Images/
single_and_multi/roof/feb09/01_img_trrnjks_vol2009.jpg' />
我希望它 - 找不到匹配項(很快) - 因為文本中只有一個單引號。 我在 C# 和使用 Expresso 正則表達式工具時發生過這種情況。 如果文本短得多,它似乎可以工作。
<IMG\s([^"'>]+|'[^']*'|"[^"]*")+>
取出幾個分支,開始和結束:
([^"'>]+)+
這個匹配“你好”有多少種方式?
(hell)(o)
(hel)(lo)
(hel)(l)(o)
(he)(llo)
(he)(l)(lo)
(he)(l)(l)(o)
... and so on
聽起來像是正則表達式引擎回溯很多的情況之一。 Friedl 的 Mastering Regular Expressions 有一些關於這個主題的好材料。
其他評論者提到復雜性是性能問題的可能原因。 我要補充一點,如果你想匹配類似於 IMG 標簽的東西,我認為你想要一個更像這樣的正則表達式:
<IMG(\s+[a-z]+=('[^']*'|"[^"]*"|[^\s'">]+))+>
當然,仍然存在此正則表達式無法捕獲的有效 HTML 變體。 就像結束/
(在 xhtml 中需要),或結束括號前的空格。 它會傳遞一些無效的情況,例如不受支持的屬性名稱。
我認為這就是您要嘗試的,我認為您長時間運行的原因正如其他地方所提到的,由於貪婪地抓取非引號或 > 與字符串處理器進行或運算(也使用 greedy ["'>] 匹配。
這似乎使用正確格式或格式錯誤的標簽快速運行。
<img(\s+((\w+)=(('[^']*?')|("[^"]*?"))))+? />
您能否發布您想要查找或提取的內容? 你想弄清楚 img 標簽指向什么嗎? 這將大大增加能夠提供更好答案的機會。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.