我有以下内容:
$reg[0] = '`<a(\s[^>]*)href="([^"]*)"([^>]*)>`si';
$reg[1] = '`<a(\s[^>]*)href="([^"]*)"([^>]*)>`si';
$replace[0] = '<a$1href="http://www.yahoo.com"$3>';
$replace[1] = '<a$1href="http://www.live.com"$3>';
$string = 'Test <a href="http://www.google.com">Google!!</a>Test <a href="http://www.google.com">Google!!2</a>Test';
echo preg_replace($reg, $replace, $string);
结果是:
Test <a href="http://www.live.com">Google!!</a>Test <a href="http://www.live.com">Google!!2</a>Test
我希望最终得到(区别在于第一个链接):
Test <a href="http://www.yahoo.com">Google!!</a>Test <a href="http://www.live.com">Google!!2</a>Test
这个想法是将字符串中链接中的每个 URL 替换为唯一的其他 URL。这是一个时事通讯系统,我想跟踪人们点击的内容,因此 URL 将是一个“假”URL,在记录点击后,他们将被重定向到真实的 URL。
最佳答案
问题是您的第一个替换字符串将与第二个搜索模式匹配,从而有效地用第二个替换字符串覆盖第一个替换字符串。
除非你能以某种方式区分“修改后的”链接和原始链接,这样它们就不会被其他表达式捕获(也许通过添加额外的 HTML 属性?),我认为你不能真正解决这个问题一次 preg_replace()
调用。我想到的一种可能的解决方案(除了正则表达式中的差异)是使用 preg_match_all()
,因为它将为您提供一系列可供使用的匹配项。然后,您可以通过迭代数组并在每个匹配的 URL 上运行 str_replace()
来使用跟踪 URL 对匹配的 URL 进行编码。
关于php - 如何将字符串中的每个 URL 替换为另一个唯一的 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/763064/