preg_replace regex删除迷路结束标记

时间:2016-05-25 15:31:04

标签: php regex preg-replace

我有一个包含不同类型的html标签和内容的字符串,包括一些<img>个元素。我试图将这些<img>元素包含在<figure>标记内。到目前为止使用这样的preg_replace非常好:

preg_replace( '/(<img.*?>)/s','<figure>$1</figure>',$content); 

但是,如果<img>标记具有相邻的<figcaption>标记,则结果相当丑陋,并为图元素生成一个迷路结束标记:

<figure id="attachment_9615">
<img class="size-full" src="http://www.example.com/pic.png" alt="name" width="1699" height="354" />
<figcaption class="caption-text"></figure>Caption title here</figcaption>
</figure> 

我已经尝试了一大堆preg_replace正则表达式变体来包装img-tag和figcaption-tag里面的图形,但似乎无法使它工作。

我的最新尝试:

preg_replace( '/(<img.*?>)(<figcaption .*>*.<\/figcaption>)?/s',
'<figure">$1$2</figure>',
$content); 

1 个答案:

答案 0 :(得分:2)

正如其他人指出的那样,更好地使用解析器,即The Big Bang Theory S09E15 X264-DIMENSION 。以下代码围绕每个DOMDocument包围<figure>标记,其中下一个兄弟是img

<figcaption>

a demo on ideone.com

要在图片的 所有 周围添加<?php $html = <<<EOF <html> <img class="size-full" src="http://www.example.com/pic.png" alt="name" width="1699" height="354" /> <figcaption class="caption-text">Caption title here</figcaption> <img class="size-full" src="http://www.example.com/pic.png" alt="name" width="1699" height="354" /> <img class="size-full" src="http://www.example.com/pic.png" alt="name" width="1699" height="354" /> <figcaption class="caption-text">Caption title here</figcaption> </html> EOF; $dom = new DOMdocument(); $dom->loadHTML($html); $xpath = new DOMXPath($dom); # get all images $imgs = $xpath->query("//img"); foreach ($imgs as $img) { if ($img->nextSibling->tagName == 'figcaption') { # create a new figure tag and append the cloned elements $figure = $dom->createElement('figure'); $figure->appendChild($img->cloneNode(true)); $figure->appendChild($img->nextSibling->cloneNode(true)); # insert the newly generated elements right before $img $img->parentNode->insertBefore($figure, $img); # and remove both the figcaption and the image from the DOM $img->nextSibling->parentNode->removeChild($img->nextSibling); $img->parentNode->removeChild($img); } } $dom->formatOutput=true; echo $dom->saveHTML(); 标记,您可能需要添加<figure>分支:

else