Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 动态地替换";src";所有属性<;img>;标签_Php_Regex - Fatal编程技术网

Php 动态地替换";src";所有属性<;img>;标签

Php 动态地替换";src";所有属性<;img>;标签,php,regex,Php,Regex,我有一些HTML,希望替换所有img标记的“src”属性,以便它们指向另一台主机上相同图像(尽管文件名不同)的副本 例如,给定这三个标签 <IMG SRC="../graphics/pumpkin.gif" ALT="pumpkin"> <IMG BORDER="5" SRC="redball.gif" ALT="*"> <img alt="cool image" src="http://www.crunch.com/pic.jpg"/> 我想换成新的

我有一些HTML,希望替换所有img标记的“src”属性,以便它们指向另一台主机上相同图像(尽管文件名不同)的副本

例如,给定这三个标签

<IMG SRC="../graphics/pumpkin.gif" ALT="pumpkin">
<IMG BORDER="5" SRC="redball.gif" ALT="*"> 
<img alt="cool image" src="http://www.crunch.com/pic.jpg"/>

我想换成新的

<IMG SRC="http://myhost.com/cache/img001.gif" ALT="pumpkin">
<IMG BORDER="5" SRC="http://myhost.com/cache/img002.gif" ALT="*"> 
<img alt="cool image" src="http://myhost.com/cache/img003.jpg"/>


我知道这有一些regexp的魔力,只是不确定它应该是什么样子(或者这实际上是不是最好的方式)。

如果你问这个问题,你很可能会得到很多答案,告诉你使用解析器。猜猜看,我想这是正确的答案。在PHP中,您可以使用DOMBOOST的方法从给定的HTML文档中创建DOM树,您可以遍历,在您进行的时候修改标签。

< P>您将需要不区分大小写的正则表达式匹配,并且还需要考虑“VS”引号。 嗯,我想我应该使用System.Text.RegularExpressions.RegEx.Replace来调用委托

您需要确保报价匹配,因此需要进行OR检查。大致如下:

\<IMG .* src\=\'.*?\' | \<IMG .* src\=\".*?\"

\使用jquery,您可以获得如下所有图像:

$(“img”)。每个(函数(
如果($this.attr('src')==”。/graphics/pumpking.gif”){
$this.attr('src','http://myhost.com/cache/img001.gif);
}否则,如果…
))

我试着用SimpleHTMLDOM来做这件事,它似乎很管用:

$html = str_get_html( ... ); // what you have done

$map = array(
  "../graphics/pumpkin.gif"       => "http://myhost.com/cache/img001.gif",
  "redball.gif"                   => "http://myhost.com/cache/img002.gif",
  "http://www.crunch.com/pic.jpg" => "http://myhost.com/cache/img003.gif",
);

foreach ($html->find("img") as $element) {
  if (isset($map[$element->src])) {
    $element->src = $map[$element->src];
  }
}

echo $html;

PS:如果你需要澄清你的问题,你应该编辑你原来的问题,而不是打开一个新的问题。

只需浏览文档中的所有图像并获取/设置src属性

var images=document.getElementByTagName('img'); for(var i=0;i<images.length;i++) { images[i].getAttribute("src");//do something with it images[i].setAttribute("src",some_new_value);//set new src } var images=document.getElementByTagName('img'); 对于(var i=0;i,您可以使用

foreach (pq("img") as $img) {
  // insert regexp magic here
  $img->attr('src', $newurl);
}

很可能是杀伤力太大了,但它很管用。特别是对于习惯使用jQuery的人。

你应该使用XML解析器,而不是正则表达式:)(我不敢相信我每天要粘贴多少次这个链接。)他更有可能得到现在必须的@David Nah的引用,这不是HTML解析,这只是纯文本解析。@罗杰,也许有这样一种节省恩典的方法。考虑到他想解析一个HTML文档,这怎么不是HTML解析呢。因为他所做的不是使用正则表达式将文本转换为HTML dom。他关心的是除了处理封闭的或非封闭的标签,或嵌套,或者实际上是账单以外的任何东西,它工作得非常完美。非常感谢。是的,你说得很对。实际上我只是想结束这个问题,开始一个新的问题,而不使用“HTML”和“regex”这两个非常危险的单词组合“,但后来我发现我无法关闭这个。哦,好吧。再次感谢。