繁体   English   中英

preg_replace语法,将图像src主机名替换为新的主机名

[英]preg_replace syntax to replace image src hostname with new hostname

我需要preg_replace语法来查找并将img src主机名从xyz.com替换为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" />

提前致谢

您应该使用DOM 而不是 Regex来解析HTML ,要解析字符串,可以使用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: 在此处尝试此代码段

<?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());

您可以尝试以下方法:

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

并替换为:

abc.host.prov.com

正则表达式演示

样例代码:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM