2011-03-05 106 views
5

我对正则表达式毫无用处,并且还没有能够谷歌自己一个明确的解决方案,这一个。正则表达式来搜索+替换href =“URL”

我想搜索+替换一些文本($内容)的锚点的href内的任何url与一个新的URL(存储为变量$ newurl)。

更改此:

<a href="http://blogurl.com/files/foobar.jpg"><img alt="foobar" src="http://blogurl.com/files/2011/03/foobar_thumb.jpg" /></a> 

要这样:

<a href="http://newurl.com/here/"><img alt="foobar" src="http://blogurl.com/files/2011/03/foobar_thumb.jpg" /></a> 

我想使用的preg_replace将是最适合这个。喜欢的东西:

preg_replace('Look for href="any-url"', 
'href="$newurl"',$content); 

的想法是让一个WordPress头版上的所有图像链接到自己的岗位,而不是到全尺寸的图像(这是他们如何默认)。通常只会有一个网址可以替换,但我认为这不会替换所有可能的匹配。

希望一切有意义,并提前感谢!

回答

4

这应该做你可以测试它花样 - here

(?<=href=("|'))[^"']+(?=("|')) 

它使用lookahead and lookbehind断言什么它匹配与HREF =”HREF =启动”,并确保它结束单引号或双引号

注意:正则表达式将无法确定这是否是一个有效的html文档 - 如果混合使用单引号和双引号括起href值,它将忽略此错误!

+0

加分点:我将如何修改这个只返回了第一场比赛? – boopboopbeep 2011-03-16 17:15:26

6

这是我想出的主旨。希望这可以帮助别人:

$content = get_the_content(); 
$pattern = "/(?<=href=(\"|'))[^\"']+(?=(\"|'))/"; 
$newurl = get_permalink(); 
$content = preg_replace($pattern,$newurl,$content); 

echo $content; 

MUCHO的Thanko到@WiseGuyEh

+1

漂亮的脚本。但我怎样才能用不同的值替换一个大HTML页面中的链接呢? – Raptor 2011-07-18 06:24:32