Php 如何制作替换图像标签的图案

Php 如何制作替换图像标签的图案,php,regex,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是

我需要更换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是可更改的。

我不知道如何定义合适的模式,我试过好几种,但都没有成功。

拜托,正则表达式不是适合这种类型的工具。在解析简单的东西时应该使用正则表达式,HTML无论如何都不是正则语言


请阅读有关使用PHP解析HTML的内容请,正则表达式不是这类事情的合适工具。在解析简单的东西时应该使用正则表达式,HTML无论如何都不是正则语言


请阅读有关使用PHP解析HTML的内容

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

preg_match('/src="(.+?)".+?width="(.+?)".+?height="(.+?)"/i', $str, $matches); preg_match('/src=“(.+?)””+?width=“(.+?)”+?height=“(.+?)”/i',$str,$matches);
然而,当这些属性开始改变顺序时,这个正则表达式将不再工作。如果可能的话,最好通过PHP解析HTML。

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

preg_match('/src="(.+?)".+?width="(.+?)".+?height="(.+?)"/i', $str, $matches); preg_match('/src=“(.+?)””+?width=“(.+?)”+?height=“(.+?)”/i',$str,$matches);
然而,当这些属性开始改变顺序时,这个正则表达式将不再工作。如果可能的话,最好通过PHP解析HTML。

这是一种想要的方式: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); 

这与想要的方式相同: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); 
这应该可以:

$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);
$img1='';
$img2=preg_replace('/\]+)(宽度|高度)=“(\d+)”([^>]*)(宽度|高度)=“(\d+”([^>]*)\>/i',”,“$img1);
参数(或任何附加参数)的顺序在这里并不重要。

这应该可以:

$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);
$img1='';
$img2=preg_replace('/\]+)(宽度|高度)=“(\d+)”([^>]*)(宽度|高度)=“(\d+”([^>]*)\>/i',”,“$img1);

参数的顺序(或任何附加)在这里并不重要。

如果图像标记也有任何其他属性,该怎么办?或者它已经有一个样式标签了?本杰明,你的回答绝对正确。但并非所有任务都需要这种方法。我们不知道卡罗尔的目标是什么,但他的问题很简单——他有许多相同模式的线条,需要更换。正则表达式在这里非常好。谢谢。它工作得很好。我的目标很简单,我只需要用一种格式替换标记,所以我认为正则表达式最适合它。如果图像标记还有其他属性呢?或者它已经有一个样式标签了?本杰明,你的回答绝对正确。但并非所有任务都需要这种方法。我们不知道卡罗尔的目标是什么,但他的问题很简单——他有许多相同模式的线条,需要更换。正则表达式在这里非常好。谢谢。它工作得很好。我的目标很简单,我只需要用一种格式替换标记,所以我认为正则表达式最适合它。