如何制作替换图像标签的模式

时间:2012-07-04 07:44:21

标签: php regex

我需要替换img标签。 原始标签例如:

<img src="index.php?act=img&amp;sub=article&id=35558" width="150" height="172">

然后我想将其替换为:

<img src="index.php?act=img&amp;sub=article&amp;id=35558" style="width: 150px; height: 172"/> 

src中的Id是可以改变的 我不知道如何定义正确的模式,我已经尝试了几个,但没有一个工作。

4 个答案:

答案 0 :(得分:2)

请说正则表达式不适合这类事情。在解析简单的事物时应该使用正则表达式,HTML无论如何都不是常规语言。

请阅读this article 关于使用PHP解析HTML

答案 1 :(得分:1)

这应该有效:

$img1 = '<img src="index.php?act=img&amp;sub=article&id=35558" width="150" height="172">';
$img2 = preg_replace('/\<img([^>]+)(width|height)="(\d+)"([^>]*)(width|height)="(\d+)"([^>]*)\>/i', '<img$1 style="$2:$3px;$5:$6px"$4$7>', $img1);

参数的顺序(或任何其他参数)在这里无关紧要。

答案 2 :(得分:0)

我认为你正在寻找一个正则表达式模式,所以你可以使用preg_match重建标签?在这种情况下,这样的事情应该是:

preg_match('/src="(.+?)".+?width="(.+?)".+?height="(.+?)"/i', $str, $matches);

然而,当这些属性开始改变顺序时,这个正则表达式将不再起作用。如果可能的话,最好通过PHP解析HTML。

答案 3 :(得分:0)

这可行的方式:P但不建议使用正则表达式来达到你的目的。

<?php
$string = '<img src="index.php?act=img&amp;sub=article&id=35558" width="150" height="172">';
echo $resultString = preg_replace(array('/\&id\b/i','/width="150" height="172"/i'), array('&amp;id','style="width: 150px; height: 172"'), $string);