preg_replace 删除除最后一个匹配元素之外的所有元素

preg_replace removing all apart from last matching elements

正在处理继承的 WordPress 主题,客户报告了一些链接的问题。

如果用户添加了 3 个(示例)链接:

<p><a href="#">Where to Invest</a></p>
<p><a href="#">Where to Invest 2</a></p>
<p><a href="#">Where to Invest 3</a></p>

页面上只显示了最后一个,查看代码可以看到内容是通过添加类到锚链接的函数解析的:

function style_content_call_to_action($content, $size='large'){
    $content = preg_replace('/<p><a.*href="(.*)">(.*)<\/a><\/p>/si', '<p><a href="" class="object button '.$size.'"></a></p>', $content);
    return $content;
}

有什么方法可以调整它,使其适用于所有按钮吗?并且只删除最后一个?

谢谢。

您需要调整您的正则表达式模式以使其准确,而不是用 (.*):

抓取所有内容
'/<p><a.*href="([^">]*)">([^<>]*)<\/a><\/p>/i'