2011-10-31 20 views
3

我需要一個preg_replace語法來在我擁有的字符串內的圖像標記的/>之後添加一些東西(任何東西)。preg_replace語法在圖像標記關閉後添加chrs

因此,例如

$string="here is a <img src="images/test.gif" /> string!" 

需求,成爲...

$string="here is a <img src="images/test.gif" /><br> string!" 
+0

你忘了逃避「in the string? –

+2

圖像標籤的格式有多可預測嗎?Wil它總是有一個src屬性,沒有其他屬性?會不會總是用'/>'來關閉,而不是簡單的'>'甚至是'>(這可能甚至不是有效的,但是不管)。 – Trott

+1

你爲什麼不用CSS來做這件事? – hakre

回答

4
$string = '<img src="test" />'; 
$result = preg_replace('/(<img[^>]+>(?:<\/img>)?)/i', '$1<br />', $string); 

這將匹配

<img /> 
<img> 
<img></img> 

以及任何大寫變化。

表達的細目:

  • 外括號 - 匹配正則表達式和捕捉到 引用1
  • 匹配字符<img字面上
  • 匹配這是不> 1和之間的任何字符無限次數儘可能多次
  • 從字面上匹配字符>(考慮到在找到時停止在上面)
  • 匹配</img>字面上零和1之間(?因爲可選)倍
1

下面是使用preg_replace一個例子:

$string = 'here is a <img src="images/test.gif" /> string!'; 
$string_to_insert = '<br>'; 

$pattern = '/(.*?\/>)(.*)/'; 
$replacement = '${1}' . $string_to_insert . '${2}'; 
$new_string = preg_replace($pattern, $replacement, $string); 

輸出:

here is a <img src="images/test.gif" /><br> string! 

說明:

  1. 個捕捉所有字符,直到和包括,則達到/>並將其存儲在第1組,$1
  2. 捕捉字符並將其存儲在第2組的其餘部分,$2
  3. 最後使得增加了在每一側上的兩個部分要插入的字符串。

注意,這個表達式只會工作,如果:

  • 沒有其他的標籤字符串
  • />關閉它正確地與/>關閉,像></img>沒有別的辦法或在不關閉全部>
相關問題