PHP-正则修改某div下的img的class并在其外层添加一个div

发布于 2017-01-15 02:31:54 字数 276 浏览 1270 评论 4

例如,有这么个字符串:

$image = '<div id="body">
<span id="msg">ssdfsdf</span>
<div id="mail">32987iu@ss.com</div>
<img alt="test" title="test" src="./test.jpg" id="logo" />
</div>';

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

归属感 2017-09-20 01:45:10

下了个dom解析类,实现了我想要的效果:

<?php
include('./simple_html_dom.php');//下载地址http://sourceforge.net/projects/simplehtmldom/files/latest/download?source=files
$image = <<<HTML
<div id="body" class="sdf">
<img alt="test" title="test" src="./test.jpg" id="logo" class="abc"/>
<span id="msg">ssdfsdf</span>
<div id="mail">32987iu@ss.com</div>
<img alt="test" title="test" src="./test.jpg" id="logo" class="abc"/>
<img alt="ab" title="test" src="./test.jpg" id="logo" class="123"/>
<img src="xxx"/>
<div id="mailss">32yuyiu@ss.com</div>
</div>

<img src="yyy" />

<div id="other">
<img src="xxx" />
</div>
HTML;

$html = str_get_html($image);
foreach($html->find('div#body img') as $e)
if(false===$e->class) $e->class = 'addClass';

echo $html;
?>
修改之后:
**<div id="body" class="sdf">** <img alt="test" title="test" src="./test.jpg" id="logo" class="abc"/> <span id="msg">ssdfsdf</span> <div id="mail">32987iu@ss.com</div> <img alt="test" title="test" src="./test.jpg" id="logo" class="abc"/> <img alt="ab" title="test" src="./test.jpg" id="logo" class="123"/> <img src="xxx" class="addClass"/> <div id="mailss">32yuyiu@ss.com</div> **</div>** <img src="yyy" /> <div id="other"> <img src="xxx" /> </div>

泛泛之交 2017-08-05 07:39:03

给你写了一个完整版的,经测试多遍,应该没什么问题了

 $image = '<div id="body"><img alt="test" title="test" src="./test.jpg" id="logo" class="addClass"/><span id="msg">ssdfsdf</span><div id="mail">32987iu@ss.com</div><div></div><div></div><img alt="test" title="test" src="./test.jpg" id="logo" class="abc addClass"/><img alt="ab" title="test" src="./test.jpg" id="logo" class="123"/><img src="xxx"/></div><div id="other"><img src="xxx" /></div><div id="body"><span id="msg">ssdfsdf</span><div id="mail">ff@ss.com</div><img alt="test" title="test" src="xxxx" id="logo1"/></div>';
$pattern = " #(<divsid="body".*?>.*?<img .*s*/?>.*?</div>|<!--[^-]*-->) #is";
preg_match_all($pattern,$image,$arr);
if(isset($arr[0]) && !empty($arr[0])){
foreach($arr[0] as &$val){
preg_match_all("/<imgs+[^>]+>/", $val, $images);
if(isset($images[0]) && !empty($images[0])){
foreach($images[0] as $k => $img){
if(preg_match("/(classs?=['"].*?addClass.*['"])/i", $img, $has_class)){
$image = str_replace($images[0][$k], '<div id="logoDiv">'.$img . '</div>', $image);
if($has_class) continue;
}
if(!preg_match("/classs?=['"](.*)['"]/i", $img, $class)){
$img = preg_replace("/(?=/>)/"," class="addClass"",$img);
}else{
$img = preg_replace("/classs?=['"](.*)['"]/i","class="$1 addClass"",$img);
}
$image = str_replace($images[0][$k], '<div id="logoDiv">'.$img . '</div>', $image);
}
}
}
}
var_dump($image);

偏爱自由 2017-04-27 02:59:12

这不是一个完美的答案,但是比较快速有效,通过观察特殊之处,一般能在几分钟内解决问题。

使用vi/vim, 进入命令行:

1,$ s/<div id="body">(.)<img (.)/>(.*)</div>';/<div id="body"1<img class="addClass" 2/></div>';3/g

此命令未检查addClass 重复,需要再写一个替换命令。

虐人心 2017-02-25 02:06:47

 $image = '<div id="body"><span id="msg">ssdfsdf</span><div id="mail">32987iu@ss.com</div><img alt="test" title="test" src="./test.jpg" id="logo" class="123"/><img src="xxx"/></div><div id="other"><img src="xxx" /></div><div id="body"><span id="msg">ssdfsdf</span><div id="mail">32987iu@ss.com</div><img alt="test" title="test" src="xxxx" id="logo1"/></div>';

preg_match_all("/<divs+ids?=["']body["']s?>(.*?</div>){2}/i",$image,$arr);
if(isset($arr[0][0]) && !empty($arr[0][0])) {
$temp = array();
foreach($arr[0] as $val) {
$temp[] = preg_replace_callback("/<img [^>]+>/","my_replace",$val);
}
$image = str_replace($arr[0],$temp,$image);
echo $image;
}
function my_replace($m) {

$m[0] = !preg_match("/(classs?=.*?)/i",$m[0]) ? preg_replace("/(?=/>)/"," class="addClass"",$m[0]) : $m[0];
return "<div>{$m[0]}</div>";
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文