preg_replace语法用新主机名

时间:2017-05-02 05:43:04

标签: php regex domdocument regex-group

我需要preg_replace语法来查找xdz.com中的img src主机名并将其替换为abc.host.prov.com 实际上,我的img html标签看起来像这样,

<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" />

提前致谢

2 个答案:

答案 0 :(得分: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());

答案 1 :(得分: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);