2012-01-18 244 views
0

我不是這個表達式字符串替換的好,但我覺得這個問題可以用得到解決......更換IMG標籤

我要取代這個:

<a href="http://www.example.com"> 
<img alt="" class="aligncenter size-full wp-image-112" height="300" src="http://www.example.comsample1.png" title="sample1" width="300" /></a> 

與此:

<p style="text-align:center;"><a href="http://www.example.com"> 
<img alt="" class="aligncenter size-full wp-image-112" height="300" src="http://www.example.comsample1.png" title="sample1" width="300" /></a></p> 

,這(如果沒有鏈接給出):

<img alt="" class="aligncenter size-full wp-image-112" height="300" src="http://www.example.comsample1.png" title="sample1" width="300" /> 

與此:

<p style="text-align:center;"> 
<img alt="" class="aligncenter size-full wp-image-112" height="300" src="http://www.example.comsample1.png" title="sample1" width="300" /></p> 

我怎樣才能使這項工作? (搜索關鍵詞是「類=「aligncenter」,如果這在IMG標籤存在,那麼我需要更換)

可能有很多的IMG或標籤更換,而不是隻有一個!

謝謝你非常多!

+0

如果你不擅長與一定的技術,如果沒有首先考慮更簡單的選項,你不應該選擇它。看到一些相關的鏈接。 – mario 2012-01-18 10:22:25

回答

3

你可能需要兩個正則表達式,一個是IMG(確保沒有<a之前或之後<img />標籤,那什麼是look ahead,則需要提前負的樣子斷言所以將如下所示:

$text = preg_replace('~<img alt="" class="aligncenter size-full wp-image-112"([^<>]+)/>\s*(?!</a)~mi', '<p style="text-align:center;">\0</p>', $text); 

m將在\s*符合新增加的線路和i使得正則表達式不區分大小寫,\0 reffers到整個匹配的文本

更換爲<a ...><img />將類似於:

$text = preg_replace('~<a href="([^"]+)"><img alt="" class="aligncenter size-full wp-image-112"([^<>]+)/>\s*</a>~mi', '<p style="text-align:center;">\0</p>', $text); 
+0

非常感謝您的幫助! :)如果我只想'class ='aligncenter'fot這場比賽,我需要改變什麼?(其餘的可以不同) – VORiAND 2012-01-18 10:40:03

+0

@VORiAND嘗試一段時間玩它,所以你會習慣它:)但基本上所有你需要的是用'「[^」] * aligncenter [^「] *」'替換'aligncenter size-full wp-image-112''(並且當你不需要' t需要更多的幫助) – Vyktor 2012-01-18 10:43:30

+0

我會盡力的!謝謝vyktor!) – VORiAND 2012-01-18 10:46:25