PHP preg_match多次出现& multipe在同一页面上使用

时间:2017-05-31 19:38:56

标签: php regex preg-replace

我创建了一个包含两列的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,因为我会定期更改关键字列表以找到最有效的关键字组合

    • 避免影响页面加载性能
    • 我使用Wordpress并且不想使用外部插件

简而言之,我的问题是:

  • 如何转换正则表达式,以便所有关键字都被替换为最多X次
  • 如何确保此preg_match不会降低我的网页效果

有什么想法吗?

非常感谢!

劳伦

1 个答案:

答案 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不会降低我的网页效果

除非您的网页中有数百个关键字,否则性能不会受到影响。 但是你最好重新编写源文件,而不是在每次请求时进行替换。