2017-05-31 129 views
0

我創建了一個包含兩列的CSV文件,其中一列帶有由|另一個帶有URL。PHP preg_match在同一頁面上多次使用和多次使用

我想用這個文件做的是在我的博客文章中找到關鍵字,並用指向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); 
     } 

$鏈接是一個包含CSV文件的內容的陣列,它包含關鍵字(S)和包含URL的關鍵的關鍵。

$value["keyword"] contains keyword1|keyword2 
$value["url"] contains the url to point to 
$content contains the article 

上述作品這裏提到的代碼,但不完全是我想它是如何工作的。對於一個給定的關鍵字,它不會替換該關鍵字的所有出現。一些關鍵字根本沒有被替換。正則表達式肯定有問題,但我沒有直接看到在哪裏。

最後,我想什麼:

  • 通過鏈接
  • 限制關鍵字被替換,以避免各地文章鏈接的倍量(如更換關鍵詞:更換兩個前兩個OCCURENCES)
  • 在頁面加載應用的preg_replace,因爲我要定期更改關鍵字列表,以找出最有效的關鍵字組合

    • 避免影響頁面加載性能
    • 我使用WordPress的,不想簡而言之使用外部插件

所以我的問題是:

  • 我該如何轉換正則表達式,以便所有關鍵字都被替換爲最多X次
  • 我如何確保preg_match不會降低我的頁面性能

任何想法?

非常感謝!

洛朗

+1

您的正則表達式不會按照您的想法工作。你爲什麼看着'p'標籤?你的意思是說,你不想匹配的話外面有相同的單詞嗎? – revo

+0

事實上,這些詞有時出現在標題或其他鏈接中,所以我想確保我只替換純文本的詞。 – Laurent

回答

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不會降低我的網頁性能

,性能應該不會受到影響。 但是你最好重寫源文件,而不是在每個請求中進行替換。

+0

謝謝,我沒有意識到極限參數,這應該可以解決其中一個問題,但是您是否知道如何確保所有關鍵字都被替換?不知何故,出於某種原因,一些關鍵字被完全丟棄。 – Laurent

+0

爲表現,名單將只在時間增長,因此我可能結束與超過100個關鍵字的名單。要在頁面中替換的關鍵字數量應該受到控制,尤其是使用限制參數。名單的大小是否會影響業績?或者只執行preg_replace? – Laurent

相關問題