你好,我有以下代码:
$content1 = '<img src="image1.png" class="image1"><img src="image2.png"><img src="image3.png" class="image3">';
当我使用这个代码时:
preg_replace('~<img's*.*?'s*class's*='s*"([^"]*)"'s*.*?>~i','<img src="image-replaced" class="$1">', $content1);
这是我得到的:
<img src="image-replaced" class="image1"><img src="image-replaced" class="image3">
你可以看到这个<img src="image2.png">
被忽略了,因为它没有class属性,所以它没有被替换。
现在我要做的是如果img标签中有class属性那么它会被替换如果没有那么替换它并保持class为空,像这样:
<img src="image2.png" class="">
感谢你的帮助。
您可以考虑使用DOM来代替正则表达式。
$doc = new DOMDocument;
@$doc->loadHTML($content1); // load the HTML data
$imgs = $doc->getElementsByTagName('img');
foreach ($imgs as $img) {
if ($img->hasAttribute('class')) {
$img->setAttribute('src', 'image-replaced');
} else {
## Otherwise set an empty class if you desire.
$img->setAttribute('class', '');
}
}
如果你必须使用正则表达式,我会考虑使用回调:
$str = preg_replace_callback('~<img src="([^"]*)"(?: class="([^"]*)")?>~i',
function($m) {
return '<img src="'.(isset($m[2])?'image-replaced':$m[1]).'" class="'.($m[2]?:'').'">';
}, $str);
eval.in
你能不能只替换src
属性的内容,而不改变类和其他东西
preg_replace('/src='"[^'"]+'"/', 'src="image-replaced.png"', '<img src="image1.png" class="image1"><img src="image2.png"><img src="image3.png" class="image3">');
https://regex101.com/r/hR9iH0/1 如果img标签中有class属性,则替换它;如果没有,则替换它,并保持class为空,像这样:
让我来帮你们,
如果图像标签有一个类,请替换src。如果图像没有类,则替换src并保留类空白,
有class=""
和没有class是一回事