0

我需要更换 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

4 回答 4

2

请,正则表达式不是这类事情的正确工具。解析简单的东西时应该使用正则表达式,HTML 无论如何都不是正则语言。

请阅读这篇关于使用 PHP 解析 HTML 的文章

于 2012-07-04T07:47:54.720 回答
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);

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

于 2012-07-04T08:16:51.683 回答
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); 
于 2012-07-04T07:55:57.593 回答
0

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

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

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

于 2012-07-04T07:51:31.477 回答