PHP - 使用preg_replace包装多个实例

时间:2016-07-08 07:40:35

标签: php preg-replace

我有一个这样的字符串:

$ less foo 
WARNING: terminal is not fully functional
foo  (press RETURN)

我想来:

'<img src="image1.jpg"><img src="image2.jpg"><img src="image3.jpg">
<img src="image4.jpg"><img src="image5.jpg">'

所以基本上我想应用一个preg_replace来包装DIV中的每两个元素。

我搜索了论坛,发现了一些我尝试过的提示:

'<div class="slide"><img src="image1.jpg"><img src="image2.jpg"></div>     
<div class="slide"><img src="image2.jpg"><img src="image3.jpg"></div>
<div class="slide"><img src="image3.jpg"></div>'

$pattern = '/(<img[^>]*class=\"([^>]*?)\"[^>]*>)+/i';
$replacement = '<div class="slide">$1</div>';
$content = preg_replace($pattern, $replacement, $content);

但它不起作用......

任何想法,伙计们?

谢谢!

2 个答案:

答案 0 :(得分:2)

使用DomDocumen对象执行此操作:

$str = '<img src="image1.jpg"><img src="image2.jpg"><img src="image3.jpg">
<img src="image4.jpg"><img src="image5.jpg">'; 
$dom = new DomDocument;
$dom->loadHTML($str);
$imgs = $dom->getElementsByTagName('img');

$i = $imgs->length;
$cur = 0;
$res = new DomDocument;

while ($i >= 2) {
   $div = $res->createElement('div');
   $div->setAttribute("class","slide"); 
   $res->appendChild($div);
   $div->appendChild($res->importNode($imgs->item($cur++)));
   $div->appendChild($res->importNode($imgs->item($cur++)));
   $i -= 2;   
}
if($i)  $res->appendChild($res->importNode($imgs->item($cur++)));

echo $res->saveHTML();

// <div class="slide"><img src="image1.jpg"><img src="image2.jpg"></div><div class="slide"><img src="image3.jpg"><img src="image4.jpg"></div><img src="image5.jpg">

答案 1 :(得分:0)

以下是工作示例:

<?php

$content = '<img src="image1.jpg"><img src="image2.jpg">
<img src="image3.jpg"><img src="image4.jpg">
<img src="image5.jpg">';

$pattern = '/((<img[^>]*src=\"([^>]*?)\"[^>]*>\s*){2,2})/i';
$replacement = '<div class="slide">$1</div>';
$content = preg_replace($pattern, $replacement, $content);

echo $content;

这是你的第二个例子,但有4个修复:

  1. class - &gt; src
  2. 添加了block()以捕获2个项目
  3. 固定数量{2,} - &gt; {2,2}(如果你想抓住最后一个img标签,则将其更改为{1,2})
  4. \s*添加以捕捉img标记之间的空格和换行符