我需要读取字符串$ mysting并替换所有e.x事件。
<img src="dummypic.jpg alt="dummy pic">
与
<img src="dummypic.jpg alt="dummy pic" title="dummy pic">
换句话说,将标题添加到缺少的位置,并使标题标记与alt标记具有相同的值。
某些事件我有额外的参数,如border,with,height - 这些应保持不变......
答案 0 :(得分:2)
而不是正则表达式,请查看PHP DOMDocument来修改属性,尤其是在存在任何复杂性的情况下。
答案 1 :(得分:2)
您可以使用phpQuery或QueryPath来执行此操作:
$qp = qp($html);
foreach ($qp->find("img") as $img) {
$img->attr("title", $img->attr("alt"));
}
print $qp->writeHTML();
虽然在这个简单的情况下使用正则表达式可能是可行的:
preg_replace('#(<img\s[^>]*)(\balt=)("[^"]+")#', '$1$2$3 title=$3', $h);
(使用preg_replace_callback以确保还没有title =属性更有意义。)
答案 2 :(得分:0)
你真的想用html解析器而不是正则表达式来做这件事。正则表达式不适合html处理。
答案 3 :(得分:0)
我的答案是一个众所周知的答案的链接!
答案 4 :(得分:0)
我经常在这些类型的情况下编写快速的黑客攻击(通常使用结构化数据,可能存在不一致性,例如模板引擎标记,条件等)。 IMO是一个糟糕的解决方案,但我可以超快地敲出这些脚本。
例如
<?
$html = '
<img src="dummypic.jpg" alt="dummy pic">
<img src="dummypic2.jpg" alt="dummy pic 2">
blahaahhh
<img src="dummypic.jpg" alt="dummy pic">
<img src="dummypic2.jpg" alt="dummy pic 2">
';
$tags = explode('<img', $html);
for ($i = 1; $i < count($tags); $i++)
{
$src = explode('src="', $tags[$i]);
$src = explode('"', $src[1]);
$src = str_replace('.jpg', '', $src[0]);
$tags[$i] = '<img title="' . $src . '"' . $tags[$i];
}
echo implode('', $tags);