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

时间:2018-03-06 12:01:06

标签: php preg-replace

处理继承的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="$1" class="object button '.$size.'">$2</a></p>', $content);
    return $content;
}

有没有办法可以调整它以便它适用于所有按钮?并且除了最后一个之外不会删除所有内容吗?

感谢。

1 个答案:

答案 0 :(得分:2)

您需要调整正则表达式模式以使其准确,而不是使用(.*)抓取所有内容:

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