我试过搜索相关答案,但找不到适合我特定需求的东西。我在一个wordpress网站上的文章中有1000多个联盟链接 - 所有文章都以相同的网址格式和子域结构开头:
http://affiliateprogram.affiliates.com/
但是,在初始url格式之后,附加的查询字符串会针对每个单独的URL进行更改,以便将访问者发送到目标站点上的特定页面。
我正在寻找能够扫描包含上述特定域的所有href链接的一串html代码(文章正文)的内容,然后用我的另一个标准链接替换THE WHOLE LINK(无论附加的查询字符串)选择。
href="http://affiliateprogram.affiliates.com/?random=query_string&page=destination"
替换为
href="http://www.mylink.com"
我最好通过php 来做这件事,因为我有一个基本的把握,但如果你有任何其他的建议我会很感激所有的输入。
提前致谢。
答案 0 :(得分:1)
<?php
$html = 'href="http://affiliateprogram.affiliates.com/?random=query_string&page=destination"';
echo preg_replace('#http://affiliateprogram.affiliates.com/([^"]+)#is', 'http://www.mylink.com', $html);
?>
答案 1 :(得分:1)
使用正则表达式,例如:
href="(https?:\/\/affiliateprogram.affiliates.com\/[^"]*)"
$data =<<<EOT
<a href="http://affiliateprogram.affiliates.com/?random=query_string&page=destination">bar</a>
<a href="http://stackoverflow.com/questions/8490284/replace-specifc-full-links-between-href-using-php">foo</a>
<a name="zz" href="http://affiliateprogram.affiliates.com/?query=random&page=destination&string">baz</a>
EOT;
echo (
preg_replace (
'#href="(https?://affiliateprogram.affiliates.com/[^"]*)"#i',
'href="http://www.mylink.com"',
$data
)
);
输出
<a href="http://www.mylink.com">bar</a>
<a href="http://stackoverflow.com/questions/8490284/replace-specifc-full-links-between-href-using-php">foo</a>
<a name="zz" href="http://www.mylink.com">baz</a>
答案 2 :(得分:0)
$a = '<a class="***" href="http://affiliateprogram.affiliates.com/?random=query_string&page=destination" attr="***">';
$b = preg_replace("/<a([^>]*)href=\"http:\/\/affiliateprogram\.affiliates\.com\/[^\"]*\"([^>]*)>/", "<a\\1href=\"http://www.mylink.com/\"\\2>", $a);
var_dump($b); // <a class="***" href="http://www.mylink.com/" attr="***">
答案 3 :(得分:-1)
这很简单,因为你只需要一个查询字符串的占位符。 .*?
通常会这样做,但您可以通过匹配任何不是双引号的内容来使其更具体:
$html =
preg_replace('~ href="http://affiliateprogram\.affiliates\.com/[^"]*"~i',
' href="http://www.mylink.com"', $html);
人们可能会来到这里并推荐一个长途domdocument方法,但这对于这样的任务来说可能有点过头了。