2008-12-08 95 views
0

我需要RegEx模式來提取圖像標記的所有屬性。提取HTML圖像屬性的RegEx

衆所周知,HTML中存在大量格式錯誤的HTML,因此該模式必須涵蓋這些可能性。

我一直在尋找這種解決方案https://stackoverflow.com/questions/138313/how-to-extract-img-src-title-and-alt-from-html-using-php,但它並沒有完全得到這一切:

我拿出這樣的:

(alt|title|src|height|width)\s*=\s*["'][\W\w]+?["'] 

有我會想念任何可能性,或者更高效的簡單模式?

編輯:
對不起,我將更具體,我正在做這個使用.NET,所以它在服務器端。
我已經有一個img標籤列表,現在我只需要解析屬性。

+0

regexHtmlParserQuestions ++ – annakata 2008-12-08 17:39:09

回答

5

大家都知道,那裏有很多格式不對的HTML,所以模式必須覆蓋這些可能性。

它不會。如果必須解析「邪惡」(來自未知來源)的HTML,請使用HTML解析器。

0

如果你想所有屬性值,我可以建議使用DOM?類似element.attributes將運行良好。

如果你堅持正則表達式//\b\w+="[^"]+"//應該得到一切。

1

如果性能不是一個大問題,我會去用一個html解析器(如python中的BeautifulSoup),如果你正在做這個服務器端或jquery或只是簡單的JavaScript,如果你在做它的客戶端。當然,它是過度殺傷性的,但它更快,不太可能有錯誤(因爲他們已經想到了角落案例),它會處理可能的錯誤。

1

最好的辦法是使用類似HTML Agility Pack而不是使用正則表達式。它被設計用來處理很多情況下,可以比一些麻煩您節省更多由於敲定邊緣情況

0
/<img(\s+([a-z]{3,})=(["']([^"']*)["']|[\S]))+\s*/?>/i 

一個MATCH_ALL上這一點,將返回(格式取決於您的圖書館,但關鍵指標是):

0 -> image tag 
1 -> attribute 
2 -> attribute name 
3 -> attribute value (with enclosing quotes if exists) 
4 -> attribute value (without enclosing quotes if it has them, otherwise empty, use 3)