2016-02-28 55 views
1

我有一组内容,其中一些<img>标签被封装在span标签内,如<span class="the-image"><img src.... /></span>,但某些图像尚未包装。我想用preg_replace创建一个正则表达式来将这个包装添加到所有那些没有它的img标签。如何包装元素,如果尚未包装?

回答

1

享受!

preg_replace('/(?!\<span\sclass="the-image"\>)(<img[\sA-Z"\-_=\/.\d]*\/\>)(?!\<\/span\>)/i','<span class="the-image"\>$0</span>',$code); 

Regex的实施例说明& https://regex101.com/r/cX8iL6/3

EDIT

PHP的preg_replace例如

$code = <<< EOT 
<span class="the-image"><img src="123" /></span><br /> 
<img src="1234" /><br /> 
<span class="the-image"><img src="blah/blah/blah" /></span> 
EOT; 

$code = preg_replace('/(?!\<span\sclass="the-image"\>)(<img[\sA-Z"\-_=\/.\d]*\/\>)(?!\<\/span\>)/i','<span class="the-image"\>$0</span>',$code); 

/* $code will become this 

<span class="the-image"><img src="123" /></span><br /> 
<span class="the-image"><img src="1234" /></span><br /> 
<span class="the-image"><img src="blah/blah/blah" /></span> 

*/ 

编辑2更改正则表达式来和PHP,以反映所需的OP ANSW呃

+0

你确定吗?你仍然有第二张图像的开放跨度。 – aslamdoctor

+0

是的,这将使它所以 '' 将成为 '' –

+0

链接没有做替换,它只是显示了如何将正则表达式匹配 –