我正在清理並將內容遷移到新網站。在一些現有頁面中,嵌入圖像鏈接到非標準文件夾中的文件。爲什麼我的preg_match_all語句捕獲比它應該更多?
我拉數據庫中的記錄,然後做一個「preg_match_all」來捕獲違規項目。然後我的意圖是清理文件名,移動違規文件,然後更新數據庫條目以反映新位置。
但是,由於某種原因,我的正則表達式似乎只發現一個匹配(已知的多個潛在命中),有時似乎捕獲了我想要的字符串下游的其他東西的整個負載。
這是我使用的表達模式:
(?i)(<img.*src="uploads/RTEmagicC_(.*)")/
這是我對匹配的來自數據庫的內容的示例:
BLAH BLAH BLAH<img src="uploads/RTEmagicC_Herpes_simpex_virus.jpg.jpg" alt="HSV particles" style="FLOAT: left; WIDTH: 214px; HEIGHT: 198px" title="Electron micrograph of HSV particles©NASA">blah blah blah<img src="uploads/RTEmagicC_Herpes_labialis_01.jpg.jpg" alt="Coldsore" style="FLOAT: right;" title="Cold sore on the lower lip (cluster of fluid-filled blisters = very infectious). These infections may appear on the lips, nose or in surrounding areas.©Metju12" width="238" height="178">blah blah blah
我試圖抓住: "Herpes_simpex_virus.jpg.jpg"
和"Herpes_labialis_01.jpg.jpg"
和各自的完整鏈接例如: "img src="uploads/RTEmagicC_Herpes_simpex_virus.jpg.jpg"
但它也匹配一堆下游內容,超出了關閉文件名的"
。
有人能讓我擺脫我的痛苦嗎?我已經嘗試了幾個晚上在這個,顯然我正在做一些愚蠢的事情,但我不明白...
非常感謝。
不要使用正則表達式來解析HTML,請使用像DOMDocument這樣的HTML解析器。 – Barmar
謝謝;但我必須承認,我不知道如何做到這一點或不使用正則表達式背後的理由。你能解釋一下,還是請給我一個參考?謝謝 – Chris
看到http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – Barmar