2013-07-14 33 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