我有一个这样的字符串:
$ 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);
但它不起作用......
任何想法,伙计们?
谢谢!
答案 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个修复:
class
- &gt; src
img
标签,则将其更改为{1,2})\s*
添加以捕捉img标记之间的空格和换行符