2013-07-14 75 views
1

我有一個頁面需要輸出來自數據庫的文本,該文本有時會通過iframe嵌入一個或多個視頻。我需要輸出它,以便視頻顯示在文本的左側(通過CSS浮動) - 儘管這需要將視頻放在文本之前。正則表達式替換爲重新排序文本

目前,我有這個

$text = preg_replace("#(.*?)(<iframe.*?</iframe>)(.*?)#i", '$2 $1 $3', $text); 

然而,這隻會移動第一個iframe中,如果超過一個存在,讓他們在那裏的人。

實例在:

abcdefghijkl 
<iframe....></iframe> 
mnopqrstuvwxyz 
<iframe....></iframe> 

期望輸出:

<iframe....></iframe> 
<iframe....></iframe> 
abcdefghijklmnopqrstuvwxyz 
+0

您只有2個iframe? – SolidSnake

+0

幀數未知;一個框架是最常見的,但可能有2+ 2+ iframes – Olirav

回答

1

也可以使用preg_replace_callback在這裏做這樣的事情是一個例子,但你將使用全局這實在是一個骯髒的解決方案:

$str = 'abcdefghijkl 
<iframe....></iframe> 
mnopqrstuvwxyz 
<iframe....></iframe>'; 

global $myText; 
global $myIframe; 

preg_replace_callback("/([^<]+)(<iframe[^>]+>[^<]*<\/iframe>)/i", 
      function($matches) use ($myText) { 
        global $myText, $myIframe; 
        $myText .= $matches[1]; 
        $myIframe .= $matches[2]; 

      }, 
      $str); 

echo $myIframe."<br>".$myText; 
+0

我不得不稍微改變它,因爲文本可以包含一些([^ <] +)似乎不喜歡的html標籤 - 所以我只是將它改爲( 。*?)但除此之外,偉大工程 - 乾杯 – Olirav

+0

而不是那些全局變量,你可以使用'功能($匹配)使用(&$ myText,&$ myIframe){':) – HamZa