2017-05-02 20 views
0

我需要preg_replace语法来查找并替换img src主机名从xyz.com到abc.host.prov.com从我个人而言,我的img html标记看起来像这样,preg_replace语法用新的主机名替换图像src主机名

<img class="aligncenter wp-image-27283 size-large" src="http://example.com/wp-content/uploads/2017/04/image-3-1024x1024.jpeg" alt="homemade chocolate recipe" width="640" height="640" srcset="http://example.com/wp-content/uploads/2017/04/image-3-1024x1024.jpeg 1024w, http://example.com/wp-content/uploads/2017/04/image-3-300x300.jpeg 300w, http://example.com/wp-content/uploads/2017/04/image-3-768x768.jpeg 768w, http://example.com/wp-content/uploads/2017/04/image-3-696x696.jpeg 696w, http://example.com/wp-content/uploads/2017/04/image-3-1068x1068.jpeg 1068w, http://example.com/wp-content/uploads/2017/04/image-3-420x420.jpeg 420w, http://example.com/wp-content/uploads/2017/04/image-3-560x560.jpeg 560w, http://example.com/wp-content/uploads/2017/04/image-3.jpeg 1080w" sizes="(max-width: 640px) 100vw, 640px" /> 

而且它必须事先与本

<img class="aligncenter wp-image-27283 size-large" src="http://abc.host.prov.com/wp-content/uploads/2017/04/image-3-1024x1024.jpeg" alt="homemade chocolate recipe" width="640" height="640" srcset="http://abc.host.prov.com/wp-content/uploads/2017/04/image-3-1024x1024.jpeg 1024w, http://abc.host.prov.com/wp-content/uploads/2017/04/image-3-300x300.jpeg 300w, http://abc.host.prov.com/wp-content/uploads/2017/04/image-3-768x768.jpeg 768w, http://abc.host.prov.com/wp-content/uploads/2017/04/image-3-696x696.jpeg 696w, http://abc.host.prov.com/wp-content/uploads/2017/04/image-3-1068x1068.jpeg 1068w, http://abc.host.prov.com/wp-content/uploads/2017/04/image-3-420x420.jpeg 420w, http://abc.host.prov.com/wp-content/uploads/2017/04/image-3-560x560.jpeg 560w, http://abc.host.prov.com/wp-content/uploads/2017/04/image-3.jpeg 1080w" sizes="(max-width: 640px) 100vw, 640px" /> 

由于更换

回答

0

你可以试试这个:

https?:\/\/\Kexample\.com 

而取代本:

abc.host.prov.com 

Regex Demo

示例代码:

$re = '/https?:\/\/\Kexample\.com/'; 
$str='YOUR INPUT STRING GOES HERE'; 
$result = preg_replace($re, $subst, $str); 
1

您应该使用DOM解析HTML,而不是Regex,对于解析字符串你可以使用Regex

解决方案1:

<?php 

ini_set('display_errors', 1); 
$string =' 
<html> 
    <body> 
     <img class="aligncenter wp-image-27283 size-large" src="http://example.com/wp-content/uploads/2017/04/image-3-1024x1024.jpeg" alt="homemade chocolate recipe" width="640" height="640" srcset="http://example.com/wp-content/uploads/2017/04/image-3-1024x1024.jpeg 1024w, http://example.com/wp-content/uploads/2017/04/image-3-300x300.jpeg 300w, http://example.com/wp-content/uploads/2017/04/image-3-768x768.jpeg 768w, http://example.com/wp-content/uploads/2017/04/image-3-696x696.jpeg 696w, http://example.com/wp-content/uploads/2017/04/image-3-1068x1068.jpeg 1068w, http://example.com/wp-content/uploads/2017/04/image-3-420x420.jpeg 420w, http://example.com/wp-content/uploads/2017/04/image-3-560x560.jpeg 560w, http://example.com/wp-content/uploads/2017/04/image-3.jpeg 1080w" sizes="(max-width: 640px) 100vw, 640px" /> 
    </body> 
</html>'; 

$domObject= new DOMDocument(); 
$domObject->loadHTML($string); 
$results=$domObject->getElementsByTagName("img"); 
foreach($results as $result) 
{ 
    $value=$result->getAttribute("src"); 
    $value=preg_replace("/^\s*(https?:\/\/(?:www\.)?)[a-zA-Z0-9]+\.com/","$1abc.host.prov.com", $value); 
    $result->setAttribute("src",$value); 
} 
print_r($domObject->saveHTML()); 

解决方案2: Try this code snippet here

<?php 

ini_set('display_errors', 1); 
$string =' 
<html> 
    <body> 
     <img class="aligncenter wp-image-27283 size-large" src="http://example.com/wp-content/uploads/2017/04/image-3-1024x1024.jpeg" alt="homemade chocolate recipe" width="640" height="640" srcset="http://example.com/wp-content/uploads/2017/04/image-3-1024x1024.jpeg 1024w, http://example.com/wp-content/uploads/2017/04/image-3-300x300.jpeg 300w, http://example.com/wp-content/uploads/2017/04/image-3-768x768.jpeg 768w, http://example.com/wp-content/uploads/2017/04/image-3-696x696.jpeg 696w, http://example.com/wp-content/uploads/2017/04/image-3-1068x1068.jpeg 1068w, http://example.com/wp-content/uploads/2017/04/image-3-420x420.jpeg 420w, http://example.com/wp-content/uploads/2017/04/image-3-560x560.jpeg 560w, http://example.com/wp-content/uploads/2017/04/image-3.jpeg 1080w" sizes="(max-width: 640px) 100vw, 640px" /> 
    </body> 
</html>'; 
$domObject= new DOMDocument(); 
$domObject->loadHTML($string); 
$domXpath= new DOMXPath($domObject); 
$results=$domXpath->query("//img"); 
foreach($results as $result) 
{ 
    $value=$result->getAttribute("src"); 
    $value=preg_replace("/^\s*(https?:\/\/(?:www\.)?)[a-zA-Z0-9]+\.com/","$1abc.host.prov.com", $value); 
    $result->setAttribute("src",$value); 
} 
print_r($domObject->saveHTML()); 
+0

是的,但在这种情况下,你并不真的需要使用XPath,因为'$结果= $ domObject-> getElementsByTagName(“img”);'产生相同的DOMNodeList。但是使用XPath,你可以直接指向src属性:'$ results = $ domXpath-> query(“// img/@ src”);' –

+0

我认为这是错误的'$ results = $ domObject-> getElementsByTagName(“ src“);'它应该是'$ results = $ domObject-> getElementsByTagName(”img“);'@CasimiretHippolyte是的,你说得对,我们可以这样使用它 –

+0

这是一个错字,现在纠正了。 –