2017-05-31 4 views
0

Ich habe eine CSV-Datei erstellt, die zwei Spalten enthält, eine mit einer Liste von Stichwörtern getrennt durch ein | und ein anderer mit einer URL.PHP preg_match mehrere Vorkommen & multipe verwendet auf derselben Seite

Was ich versuche mit dieser Datei zu tun ist, die Schlüsselwörter in meinen Blogartikeln zu finden und einfachen Text durch Links zu ersetzen, die auf die URL aus der CSV-Datei zeigen. Das Endziel ist die Steigerung der SEO-Leistung bei einigen Keywords.

ich den folgenden Code bin mit:

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 ein Array ist, den Inhalt der CSV-Datei enthält, hat es eine Taste, um das Keyword (s) und einen Schlüssel enthält die URL enthält.

Beispiel

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

Die hier oben genannten Werke Code aber nicht genau, wie ich es arbeiten möchte. Für ein bestimmtes Schlüsselwort ersetzt es nicht alle Vorkommen dieses Schlüsselworts. Einige Schlüsselwörter werden überhaupt nicht ersetzt. Es muss etwas mit dem regulären Ausdruck nicht stimmen, aber ich sehe nicht direkt wo.

Am Ende ginge, was würde Ich mag an:

  • durch einen Link ein Schlüsselwort ersetzen
  • Grenze der Menge wie oft ein Keyword ersetzt Links zu vermeiden ganzen Artikel mit (ex : die beiden ersten beiden Vorkommnissen)
  • die preg_replace auf Seite Last ersetzen gelten, weil ich

    die effizienteste Keyword-Kombination zu finden regelmäßig werde, um die Keyword-Liste ändern Auswirkungen auf Seitenladeleistung
  • vermeiden
  • Ich bin mit Wordpress und wollen keinen externen Plug-in verwenden

Also kurz gesagt, meine Fragen sind:

  • wie könnte ich den regulären Ausdruck so transformieren, dass alle Schlüsselwörter durch ein Maximum von X ersetzt werden
  • Wie kann ich sicherstellen, dass diese preg_match meine Seitenleistung nicht verringert
  • Eine Idee?

    Vielen Dank!

    Laurent

+1

Ihre Regex funktioniert nicht so, wie Sie denken. Warum schaust du in 'p' Tags? Meinst du, es gibt dieselben Wörter außerhalb davon, die du nicht zusammenbringen willst? – revo

+0

In der Tat erscheinen diese Wörter manchmal in Titeln oder in anderen Links, so dass ich sicherstellen möchte, dass ich nur diejenigen im Klartext ersetze. – Laurent

Antwort

0

Wie konnte ich den regulären Ausdruck transformieren, so dass alle Schlüsselwörter mit einem Maximum von X mal

In preg_replace ersetzt werden, gibt es eine limit Argument:

mixed preg_replace (mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]]) 

so in Ihrem Code:

$content=preg_replace($pattern,"$1 <a href=\"".$url."\">$2</a> $3",$content, $MAX_REPLACE); 

Wie kann ich sicherstellen, dass diese preg_match nicht meine Seite Leistung nicht verringert

Es sei denn, Sie Hunderte von Keywords auf Ihrer Seite haben, die Leistung nicht beeinträchtigt soll zu werden. Aber Sie sollten besser die Quelldateien neu schreiben, anstatt die Ersetzung bei jeder Anfrage durchzuführen.

+0

Danke, mir war der Limit-Parameter nicht bekannt, der eines der Probleme lösen sollte, aber weißt du, wie ich sicherstellen kann, dass alle Keywords ersetzt werden? Irgendwie werden einige Keywords aus irgendeinem Grund komplett verworfen. – Laurent

+0

für die Leistung wird die Liste nur in der Zeit wachsen, so dass ich mit einer Liste von mehr als 100 Keywords enden könnte. Die Anzahl der Schlüsselwörter, die auf einer Seite zu ersetzen sind, sollte insbesondere mit dem Limit-Parameter unter Kontrolle bleiben. Würde sich die Größe der Liste auf die Leistung auswirken? Oder nur die Ausführung des preg_replace? – Laurent