正则表达式搜索和替换 href="URL"

5

我对正则表达式一无所知,也没有找到一个清晰的解决方案。

我想要搜索并替换一些文本($content)中锚点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>

To this:

<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 前端页面上的所有图片链接到它们的文章而不是全尺寸图片(这是它们默认的方式)。通常只需要替换一个 url,但我认为替换所有可能的匹配也没有问题。

希望以上内容能够清楚表述,提前感谢!

2个回答

7
这是我提出的要点,希望能对某些人有所帮助:
$content = get_the_content();
$pattern = "/(?<=href=(\"|'))[^\"']+(?=(\"|'))/";
$newurl = get_permalink();
$content = preg_replace($pattern,$newurl,$content);

echo $content;

非常感谢@WiseGuyEh。

1
不错的脚本。但是我该如何逐个替换大型HTML页面中的链接,并使用不同的值? - Raptor

6

这应该可以解决问题- 你可以在这里进行测试

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

它使用前瞻和后顾来断言它所匹配的任何内容都以href="href='开头,并确保它以单引号或双引号结尾。
注意:该正则表达式无法确定这是否是有效的html文档-如果混合使用单引号和双引号来包含href值,它将忽略此错误!

奖励分:我该如何修改它以仅返回第一个匹配项? - boopboopbeep

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接