正则表达式替换为重新排序文本

时间:2013-07-14 17:12:26

标签: php regex preg-replace

我有一个需要从数据库输出文本的页面,此文本有时会通过iframe嵌入一个或多个视频。我需要输出这个,以便视频显示在文本的左侧(通过css浮动) - 虽然这需要将视频放在文本之前。

目前我有这个

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

然而,如果存在多个iframe,则只会移动第一个iframe,而将其他iframe保留在原来的位置。

示例在:

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

Desired Out:

<iframe....></iframe>
<iframe....></iframe>
abcdefghijklmnopqrstuvwxyz

1 个答案:

答案 0 :(得分: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;