2011-11-04 200 views
0

我一直在尋找通過的問題,並得到了我的問題的一個更好的主意,不過,並沒有找到答案。正則表達式:匹配HTML文件中的所有alt屬性?

我在PHP中的正則表達式的問題。我試圖獲取HTML文件的「alt」屬性中的所有文本。我正在考慮所有可能的標籤名稱(img,輸入和區域)以及各種可能性,如字符間的空格和換行符(如<img alt = "Hello">)。它也必須認識到,匹配字符串可以通過單次或雙引號括起來,並含有其他內(不同的)引號,例如:<img alt="Alan's picture"><img alt='Example for the word "hello" in the text'>

這是越來越難了我(我用正則表達式初學者),所以我就告訴你我得到了什麼。請注意,我正在嘗試在角色類中使用倒退,我發現這是一種錯誤的做法(或者我認爲)。

'/<\s*(?:img|input|area)\s[^>]*alt\s*=\s*("|\')([^\1>]*)\1[^>]*>/siU'

我也看到了在StackOverflow上,有人建議HTML解析器像這樣的東西,但我很擔心這種做法可能多少資源消耗。你認爲這是一個更好的主意嗎?謝謝!

+0

而您並不擔心正則表達式解決方案會消耗多少資源(CPU和人員維護)? – Mat

+0

這就是我的意思...... HTML解析器會消耗更多資源嗎?或更少?我正在嘗試HTML解析器的選擇,但我想知道哪種方法消耗的資源更少。 – Diego

回答

0

絕對應該使用一個分析器。造成這種情況的原因如下:

  • HTML解析器庫可以解釋正常表達式將會遺漏的斷開的(或其他格式錯誤的)HTML;例如,一些網頁將無法逃脫嵌在alt屬性引號,如alt='why can't I do this'
  • 解析器將能夠自動處理轉義字符;例如,alt="why&#32;the&#32;long&#32;space"
  • 此外,它可能是一個HTML解析器將提供速度和API的優勢

你或許可以檢查出的StackOverflow問題Robust, Mature HTML Parser for PHP有關哪些解析器將是值得使用的一些建議。

+0

謝謝!我之前得到了這個線程,我正在使用PHP的DomDocument ... – Diego