Jenny81: RegExp gesucht

Hi,

ich versuche gerade aus einem System HTML-Files generieren zu lassen.
Das Grundsystem hat alle Links in folgenden Varanten:

index.php
index.php?kat_id=21
/?kat_id=25
?kat_id=25
Zudem gibt es noch einige andere Variablen wie z.B. die Seitenzahl:
?kat_id=25&page=2
Oder die Druckversion:
?kat_id=25&show=print

Aus diesen Pfadangaben möchte ich den Dateinamen der neuen HTML-Datei zusammenbauen und folglich auch sämtliche Links auf der Seite automatisch ersetzen lassen.

Ziel:
index.html
21.html
25_2.html // mit Seitenzahl
25_print.html // Druckversion

Der komplette HTML-Content liegt in einer Var namens $content vor.

Mein Ansatz (fürs erste):
$content=preg_replace("|?kat_id=(\d+)|","$1.html",$content);

Problem dabei ist:

  • es sind nicht immer alle Parameter (show, page, kat_id) vorhanden.
  • manchmal sind die Parameter leer (kat_id=&page=1)

Wie könnte ich das lösen?

Besten Dank
Jenny81

  1. index.php
    index.php?kat_id=21
    /?kat_id=25
    ?kat_id=25
    Zudem gibt es noch einige andere Variablen wie z.B. die Seitenzahl:
    ?kat_id=25&page=2
    Oder die Druckversion:
    ?kat_id=25&show=print

    Aus diesen Pfadangaben möchte ich den Dateinamen der neuen HTML-Datei zusammenbauen und folglich auch sämtliche Links auf der Seite automatisch ersetzen lassen.

    Willst du wirklich _Dateien_ unter diesen Namen im System _speichern_ oder willst du URI-Pfade für publizierte Ressource-Adressen zusammenbauen?

    Ziel:
    index.html
    21.html
    25_2.html // mit Seitenzahl
    25_print.html // Druckversion

    Der komplette HTML-Content liegt in einer Var namens $content vor.

    Mein Ansatz (fürs erste):
    $content=preg_replace("|?kat_id=(\d+)|","$1.html",$content);

    Das heisst, deine Pfade haben keinerlei Delimiter.
    Ich prophezeie dir übelsten Umgang mit dem Inhalt.
    Da ich vermute, dass deine Pfade in einem bestimmten Kontext stehen:
    Bsp. <a href="?kat_id=25&show=print">
    solltest du diesen Kontext in dein Suchpattern einbeziehen.

    Problem dabei ist:

    • es sind nicht immer alle Parameter (show, page, kat_id) vorhanden.
    • manchmal sind die Parameter leer (kat_id=&page=1)
      Wie könnte ich das lösen?

    Löse es bevor du ersetzen musst. Erzeuge gar nicht erst Pfade, die du eh nicht willst.

    Die Lösung heisst eigentlich: Matche auf den Context, und überführe den Inhalt via callback Funktion an eine sub, welche sich der Details annimmt.

    -> preg_replace_callback()

    Du hast übrigens nicht gesagt, ob das eine einmalige Umbau-Aktion ist, oder ob du die CPU permanent verbraten willst.

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. Hi Beat,

      dabei geht um um die einmalige Erstellung eines "HTML-Dump" eines Katalogsystems, die lokal auf dem Laptop laufen soll.

      Ja, die Links sind logischer Weise in A-Tags (<a href="?kat_id=25&show=print">) eingebettet.
      Aber das Grundsystem kann und will ich nicht umstricken (kommt letztendlich nicht von mir). Ich schnappe mir nur den Inhalt via ob_get_contents() und möchte daraus möglichst schnell und einfach eine HTML-Only-Variante erzeugen.

      Beste Grüße
      Jenny