2011-09-15 78 views
0

我今天早上“很厚”,所以请原谅这个简单的问题 - 我有一个关键字数组, array('keyword1','keyword2'....)和我有一串文字 - (有点像博客内容的长度,即不只是几个字,但可能是200-800字)什么是最好的方式来搜索关键字的字符串,并用href链接替换它们。所以在文本'关键字1'(纯文本)将变为<a href='apage'>keyword1</a>等等。PHP用href链接替换字符串中的关键字

看到说这是我很厚。

非常感谢。

回答

2

典型preg_replace情况:

$text = "There is some text keyword1 and lorem ipsum keyword2."; 
$keywords = array('keyword1', 'keyword2'); 

$regex = '/('.implode('|', $keywords).')/i'; 

// You might want to make the replacement string more dependent on the 
// keyword matched, but you 'll have to tell us more about it 
$output = preg_replace($regex, '<a href="apage">\\1</a>', $text); 

print_r($output); 

See it in action

现在上面的代码并不是一个非常“聪明”的替换,因为href不是匹配关键字的函数,而实际上您可能会想要这样做。请在此处查看preg_replace_callback以获得更多灵活性,或者编辑问题并提供有关您的目标的更多信息。

+0

完美的感谢做了我想要的,只是出于兴趣,有没有办法只在第一次“匹配”关键字时才会发生? –

+0

@RussellParrott:匹配*任何一个*关键字的第一个实例[简单](http://stackoverflow.com/questions/6729710/replace-only-first-match-using-preg-replace)。匹配每个*关键字的第一个实例并不那么简单;你可能需要为每个关键字做一个'preg_replace',在循环中限制为1或者(最好)使用'preg_replace_callback',“记住”哪些关键字至少匹配了一次,并且返回关键字本身作为替换对于那些已经见过的人来说。 – Jon

0

为什么你会用正则表达式而不是str_replace()!?正则表达式的工作,但它使这样一个令人难以置信的简单问题复杂化。