php
  • html
  • regex
  • pattern-matching
  • 2011-07-20 47 views 0 likes 
    0

    我想從一些內容的正文中提取特定的url模式,並用新形成的url替換它。但我遇到了我的正則表達式模式的問題,並想看看你能否幫助我。現在正則表達式從<img>標籤中提取具體的url在一個HTML文檔

    $body = '<p><img src="/file/637/view" height="540" width="640"></p>'; 
    $pattern = '/src="/file/(0-9)+/view"/'; 
    $pattern = '/src="/file/(.)+/view"/'; 
    $pattern = '/"/file/[0-9]+/view"'; 
    $pattern = '/\<img src="(.)+"(.)+"\>/'; 
    
    preg_match($pattern, $body, $matches); 
    

    ,最後的模式下將抓住整個圖像的標籤,這是偉大的,但我想它提取所有圖像的URL的內容(只需:

    這裏是代碼我有測試此該網址)使用「/文件/(某些數字)/視圖」模式,以便我可以形成新的網址,然後做一個字符串替換它們。當我在$ matches var上運行print_r時,所有其他人都找不到任何東西。

    很明顯,主體字符串表示我正在掃描的內容正文。任何建議如何讓這個工作,並抓住圖像的網址?這將不得不適用於多個圖像與大量其他html(包括錨標籤)混合的情況。

    +1

    真正的問題是,你爲什麼使用正則表達式和XML解析? –

    +0

    *(相關)* [最佳方法解析HTML](http://stackoverflow.com/questions/3577641/best-methods-to-parse-html/3577662#3577662) – Gordon

    +0

    @tandu上次我檢查它是便宜(資源方面)在一小塊內容上運行一個小的正則表達式,而不是將HTML段解析成一個對象,然後對其執行操作並將其從對象轉換回html。所以,除非你有一個強有力的論點來解析HTML,修改它,然後將其轉換回來,我想我會堅持使用正則表達式。 – pthurmond

    回答

    1

    嘗試(.*?)或您的問題,以取代(.),試試以下

    $body = '<p><img src="/file/637/view" height="540" width="640"></p>'; 
    $pattern = '/\/file\/([0-9]+)\/view/'; 
    
    
    preg_match($pattern, $body, $matches); 
    
    +0

    你是這個意思嗎? $ pattern ='/src="/file/(.*?)+/view"/'; – pthurmond

    +0

    已編輯。看看我的代碼並試試 – genesis

    +0

    需要在那裏跳過一些斜槓(或者,最好是更改分隔符)。 – Wiseguy

    0

    你需要逃避斜線,我覺得你有一些轉義斜槓有

    試試這個:

    $body = '<p><img src="/file/637/view" height="540" width="640"></p>'; 
    $pattern = '/<img src="\/file\/([0-9]+)\/view"/' 
    
    preg_match($pattern, $body, $matches); 
    
    echo ($matches[1]); 
    
    相關問題