簡體   English   中英

正則表達式匹配 img 標簽的 url

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM