用PHP(和正则表达式)替换锚文本

时间:2011-09-23 17:14:26

标签: php regex anchor

我有一个包含很多链接的字符串,我想在将它们打印到屏幕之前进行调整:

我有以下内容:

<a href="http://www.dont_replace_this.com">replace_this</a>

并希望最终得到像这样的东西

<a href="http://www.dont_replace_this.com">replace this</a>

通常我会使用类似的东西:

echo str_replace("_"," ",$url); 

在这种情况下我不能这样做,因为URL包含下划线,所以它打破了我的链接,我想可以使用正则表达式解决这个问题。

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

这是正则表达式:<a(.+?)>.+?<\/a>

我正在做的是在锚标记中保留重要的动态内容,并用以下函数替换它:

preg_replace('/<a(.+?)>.+?<\/a>/i',"<a$1>REPLACE</a>",$url);

答案 1 :(得分:2)

这将涵盖大多数情况,但我建议您进行检查以确保没有遗漏或更改任何意外情况。

 pattern = "/_(?=[^>]*<)/";
 preg_replace($pattern,"",$url);

答案 2 :(得分:0)

您可以使用此正则表达式

(>(.*)<\s*/) 

以及preg_replace_callback

编辑:

$replaced_text = preg_replace_callback('~(>(.*)<\s*/)~g','uscore_replace', $text);  
function uscore_replace($matches){
   return str_replace('_','',$matches[1]); //try this with 1 as index if it fails try 0, I am not entirely sure
}