PHP preg_match / replace?

时间:2011-03-04 14:57:52

标签: php regex preg-replace preg-match

我需要读取字符串$ mysting并替换所有e.x事件。

<img src="dummypic.jpg alt="dummy pic">

<img src="dummypic.jpg alt="dummy pic" title="dummy pic">

换句话说,将标题添加到缺少的位置,并使标题标记与alt标记具有相同的值。

某些事件我有额外的参数,如border,with,height - 这些应保持不变......

5 个答案:

答案 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)

我的答案是一个众所周知的答案的链接!

RegEx match open tags except XHTML self-contained tags

答案 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);