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'
正在处理继承的 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'