2011-09-17 86 views
2

我需要做的preg_replace:關於產品的preg_replace

<p><img class="mceItem" src="http://img.youtube.com/vi/PZVfZ9TmW6w/0.jpg" alt="PZVfZ9TmW6w" width="306" height="229" /></p> 

,並更換到:

<iframe width="560" height="345" src="http://www.youtube.com/embed/PZVfZ9TmW6w" frameborder="0" allowfullscreen></iframe> 

但我有很多:

<p><img class="mceItem" src="http://img.youtube.com/vi/PZVfZ9TmW6w/0.jpg" alt="PZVfZ9TmW6w" width="306" height="229" /></p> 

然後我需要做一個preg_replace來替換所有它們。

它可以做到與preg_replace?

謝謝。

+1

請不要用正則表達式解析HTML。 – Blender

+1

簡短的回答是,即使你能夠在某些特定情況下,你不應該和這樣的問題的傳統是鏈接到[這個答案](http://stackoverflow.com/questions/1732348/regex-match-open標籤都有效,除非-XHTML-自足標籤/ 1732454#1732454)。 –

回答

0

默認情況下,preg_replace將替換所遇到的所有匹配項。您可以通過添加參數來限制數量。

preg_replace('/regex/', 'replaceWith', $string, $noOfMatches); 

希望能回答你的問題,祝你好運。

如果你正在尋找的正則表達式本身然後快速匹配該字符串會..

'#<p><img class\="mceItem" src\="http:\/\/img\.youtube\.com\/vi\/PZVfZ9TmW6w\/0\.jpg" alt\="PZVfZ9TmW6w" width\="306" height\="229" \/><\/p>#' 

我剛剛逃脫的特殊字符。 Here is a cheatsheet on regex.如果您正在解析HTML,您可能需要在PHP中檢查DOMDocument。它可以讓您操作dom結構,並在學習如何使用它時簡化過程。

如果您剛開始使用,我建議使用SimpleHTMLDom分析器,該分析器位於單個文件中,以便拖放到您的服務器上。這很簡單,很好的介紹。還有很多例子。它保持here

編輯:好的,用正則表達式首先獲得視頻ID ..

preg_match_all('#img\.youtube\.com\/vi\/(.*?)\/#', $searchString, $matches); 
foreach($matches[1] as $vid_id) 
{ 
    $iframe_string = '<iframe width="560" height="345" src="http://www.youtube.com/embed/'.$vid_id.'" frameborder="0" allowfullscreen></iframe>'; 
    preg_replace('#<p><img class\="mceItem" src\="http:\/\/img\.youtube\.com\/vi\/\'.$vid_id.\'\/0\.jpg" alt\="'.$vid_id.'" width\="306" height\="229" \/><\/p>#', $iframe_string, $searchString); 
} 
+0

我知道,但我需要模式的幫助 – Darj2h

+0

好吧一分鐘。我會發佈一個適用於給定字符串的工作。 – Adam

+0

我需要將alt \ =「PZVfZ9TmW6w」傳遞給iframe src ... – Darj2h

0

是expresion

<p><img class="mceItem" src="http://img.youtube.com/vi/PZVfZ9TmW6w/0.jpg" alt="PZVfZ9TmW6w" width="306" height="229" /></p> 

總是定期?你可以使用substr來獲取除視頻號碼PZVfZ9TmW6w外的所有內容

0

使用preg_replace或任何RegEx for HTML進行這種轉換隻是一個壞主意。

如果您沒有像功能一樣掛斷結果,您可以使用phpqueryquerypath獲取HTML頁面中的所有實例,並遞歸替換所需的任何內容。

大概在計算器上恕我直言,隨着PHP解析HTML優惠的文章是這個: How to parse HTML with PHP?

這也爲什麼,爲什麼不使用正則表達式解析HTML會談。主要是爲什麼不。對於我自己和其他許多開發人員來說,它只是一個嘗試使用正則表達式解析HTML(可能略有不同,從鏈接到鏈接,甚至是從一行到另一行)的痛苦處方。 HTML太寬鬆了,並且允許使用RegEx的標記可以在100%的時間內運行。