【发布时间】:2017-05-31 19:38:56
【问题描述】:
我创建了一个 CSV 文件,其中包含两列,其中一列包含由 | 分隔的关键字列表。另一个有 URL。
我试图用这个文件做的是在我的博客文章中找到关键字,并用指向 CSV 文件中 URL 的链接替换纯文本。最终目标是提高某些关键字的 SEO 性能。
我正在使用以下代码:
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,因为我会定期更改关键字列表以找到最有效的关键字组合
- 避免影响页面加载性能
- 我正在使用 Wordpress,不想使用外部插件
简而言之,我的问题是:
- 如何转换正则表达式,以便所有关键字最多被替换 X 次
- 如何确保此 preg_match 不会降低我的页面性能
有什么想法吗?
非常感谢!
劳伦特
【问题讨论】:
-
您的正则表达式没有按照您的想法工作。你为什么在
p标签内寻找?你的意思是在它之外还有你不想匹配的相同单词? -
确实,这些词有时会出现在标题或其他链接中,所以我想确保我只替换纯文本中的词。
标签: php regex preg-replace