2012-01-30 164 views
3

我试图用不同的URL替换大字符串中的所有链接href。使用下面的代码它似乎只取代第二个链接离开第一个完好无损,有人可以帮我吗?使用PHP preg_replace更改html链接的href属性

$string_of_text = '<a href="http://www.php.net/">PHP</a> <a href="http://www.apache.org/">Apache</a>'; 
echo preg_replace('/<a(.*)href="(.*)"(.*)>/','<a$1href="javascript:alert(\'Test\');"$3>',$string_of_text); 
+1

请修复您的问题标题以描述问题。看看我评论右侧“相关”面板中的所有垃圾,并且不要添加到它。 :) – 2012-01-30 00:40:46

+1

使用HTML解析器可能更容易。 – 2012-01-30 00:40:50

+1

大声笑,我很抱歉Lightness Races in Orbit,我无法在任何地方看到编辑按钮,但是我会确定我的下一个问题更详细 – Joe 2012-01-30 00:45:28

回答

11

而不是任何字符.使用任何不(^)报价[^"]

echo preg_replace('/<a(.*)href="([^"]*)"(.*)>/','<a$1href="javascript:alert(\'Test\');"$3>',$string_of_text); 
+0

你把它放在错误的地方。 – mowwwalker 2012-01-30 00:42:54

+0

@Walkerneo谢谢,纠正了我的答案。 (过去的午夜。) – 2012-01-30 00:53:24

+0

@JoopEggen,我有几乎相似的问题。我有一个包含id params的链接数组,以及另一个id数组。我想要替换第二个数组中具有相同ID的第一个数组的所有链接的href属性....对于我的语法,如果不正确,请对不起! – Haris 2014-08-12 05:34:12

5

只需使用贪婪运营商在你的正则表达式是这样的:

'/<a(.*?)href="(.*?)"(.*?)>/' 

它的工作原理,你可以在这里看到:http://ideone.com/WbVd0

+0

正是我需要的,谢谢:) – Joe 2012-01-30 00:44:07

+1

为什么这个答案不被接受? :| – Yash 2013-10-31 14:52:28

0

稍微修改金relio De Rosa的回答:

'/<a(.*?)href=(["\'])(.*?)\\2(.*?)>/i'