使用PHP preg_replace将文本附加到使用regex找到的模式

使用PHP preg_replace将文本附加到使用regex找到的模式,php,regex,Php,Regex,我想在所有标记img之前和之后附加一个标记div 所以我有 <img src=%random url image% /> 它应该被替换为 <div class="demo"><img src=%random url image% /></div> 我可以用preg_替换吗 $string = %page source code%; $find = array("/<img(.*?)\/>/"); $replace = arr

我想在所有标记img之前和之后附加一个标记div

所以我有

<img src=%random url image% />

它应该被替换为

<div class="demo"><img src=%random url image% /></div>

我可以用preg_替换吗

$string = %page source code%;
$find = array("/<img(.*?)\/>/");
$replace = array('<div class="demo">'.$find[0].'</div>');
$result = preg_replace($find, $replace, $string);
$string=%page源代码%;
$find=数组(“/”);
$replace=数组('.$find[0].');
$result=preg_replace($find,$replace,$string);

但是它不起作用:/

解析HTML的更好方法是使用PHP和类。在本例中,您可以使用XPath查找所有图像,然后在图像周围添加一个div,如本例所示:

$html = '<div><img src="http://x.com" /><span>xyz</span><a href="http://example.com"><img src="http://example.com" /></a></div>';
$doc = new DOMDocument();
$doc->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXpath($doc);
$images = $xpath->query('//img');
foreach ($images as $image) {
    $div = $doc->createElement('div');
    $div->setAttribute('class', 'demo');
    $image->parentNode->replaceChild($div, $image);
    $div->appendChild($image);
}
echo $doc->saveHTML();
$html='xyz';
$doc=新的DOMDocument();
$doc->loadHTML($html,LIBXML\u html\u noimpled | LIBXML\u html\u NODEFDTD);
$xpath=新的DOMXpath($doc);
$images=$xpath->query('//img');
foreach($images作为$image){
$div=$doc->createElement('div');
$div->setAttribute('class','demo');
$image->parentNode->replaceChild($div,$image);
$div->appendChild($image);
}
echo$doc->saveHTML();
输出:

<div>
    <div class="demo"><img src="http://x.com"></div>
    <span>xyz</span>
    <a href="http://example.com">
        <div class="demo"><img src="http://example.com"></div>
    </a>
</div>

xyz

解析HTML的更好方法是使用PHP和类。在本例中,您可以使用XPath查找所有图像,然后在图像周围添加一个div,如本例所示:

$html = '<div><img src="http://x.com" /><span>xyz</span><a href="http://example.com"><img src="http://example.com" /></a></div>';
$doc = new DOMDocument();
$doc->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXpath($doc);
$images = $xpath->query('//img');
foreach ($images as $image) {
    $div = $doc->createElement('div');
    $div->setAttribute('class', 'demo');
    $image->parentNode->replaceChild($div, $image);
    $div->appendChild($image);
}
echo $doc->saveHTML();
$html='xyz';
$doc=新的DOMDocument();
$doc->loadHTML($html,LIBXML\u html\u noimpled | LIBXML\u html\u NODEFDTD);
$xpath=新的DOMXpath($doc);
$images=$xpath->query('//img');
foreach($images作为$image){
$div=$doc->createElement('div');
$div->setAttribute('class','demo');
$image->parentNode->replaceChild($div,$image);
$div->appendChild($image);
}
echo$doc->saveHTML();
输出:

<div>
    <div class="demo"><img src="http://x.com"></div>
    <span>xyz</span>
    <a href="http://example.com">
        <div class="demo"><img src="http://example.com"></div>
    </a>
</div>

xyz

您可能可以使用“preg\u replace\u”来执行此操作,但这并不意味着您应该执行此操作。请考虑使用XML/HTML解析器。请不要尝试使用正则表达式解析[X] HTML。你可能想看一看。你可能可以用'preg_replace_'来做这件事,但这并不意味着你应该这么做。请考虑使用XML/HTML解析器。请不要尝试使用正则表达式解析[X] HTML。你可能想看看。