我创建了一个包含两列的CSV文件,其中一列包含以|分隔的关键字列表另一个带URL。
我尝试使用此文件的方法是在我的博客文章中找到关键字,并通过指向CSV文件中的URL的链接替换纯文本。最终目标是提高某些关键字的搜索引擎优化效果。
我使用以下代码:
foreach ($links as $key=>$value)
{
$url=$value["url"];
$pattern="#<p.*?>(.*)\ (".$value["keyword"].")\ (.*)</p>#";
$content=preg_replace($pattern,"$1 <a href=\"".$url."\">$2</a> $3",$content);
}
$ links是一个包含CSV文件内容的数组,它包含一个包含关键字的键和一个包含该URL的键。
实施例
$value["keyword"] contains keyword1|keyword2
$value["url"] contains the url to point to
$content contains the article
上面提到的代码有效但不完全是我希望它如何工作。对于一个给定的关键字,它不会替换该关键字的所有匹配项。有些关键字根本没有替换。正则表达式一定有问题,但我不能直接看到。
最后,我想:
在页面加载时应用preg_replace,因为我会定期更改关键字列表以找到最有效的关键字组合
简而言之,我的问题是:
有什么想法吗?
非常感谢!
劳伦
答案 0 :(得分:0)
如何转换正则表达式,以便最多替换所有关键字X次
在preg_replace中,有一个limit
参数:
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
所以在你的代码中:
$content=preg_replace($pattern,"$1 <a href=\"".$url."\">$2</a> $3",$content, $MAX_REPLACE);
如何确保此preg_match不会降低我的网页效果
除非您的网页中有数百个关键字,否则性能不会受到影响。 但是你最好重新编写源文件,而不是在每次请求时进行替换。