Viennamade: Ressourcen sparen bei preg_match

Hallo liebe Forumer!

Die folgende Schleife habe ich aus den FAQ der de.comp.lang.php.* kopiert, sie ersetzt alle Links einer HTML-Datei:

$pattern = '=^(.*)<a(.*)href="?(\S+)"([^>]*)>(.*)</a>(.*)$=msi';
while (preg_match($pattern, $pagecontent, $txt))
{
  /* $txt[3] enthält die gewünschte URL. */
  /* $zeile neu bauen */
  $pagecontent = $txt[1]." hier war mal ein Link ".$txt[6];
}

Eine andere Möglichkeit ist es $txt bereits vor der Schleife zu 'befüllen', also das preg_match eben vor der Schleife zu machen.
Und dann über das fertige $txt zu schleifen und dabei die  Änderungen an $pagecontent vorzunehmen.
Ist die letztere Methode nicht ressourcensparender? Schneller?

Beste Grüße
Viennamade

  1. Hallo!

    $pattern = '=^(.*)<a(.*)href="?(\S+)"([^>]*)>(.*)</a>(.*)$=msi';
    while (preg_match($pattern, $pagecontent, $txt))
    {
      /* $txt[3] enthält die gewünschte URL. */
      /* $zeile neu bauen */
      $pagecontent = $txt[1]." hier war mal ein Link ".$txt[6];
    }

    Wieso verwendest Du nicht einfach preg_replace()?

    Grüße
    Andreas

    --
    SELFHTML Feature Artikel: http://aktuell.de.selfhtml.org/artikel/
    1. Hallo!

      $pattern = '=^(.*)<a(.*)href="?(\S+)"([^>]*)>(.*)</a>(.*)$=msi';
      while (preg_match($pattern, $pagecontent, $txt))
      {
        /* $txt[3] enthält die gewünschte URL. */
        /* $zeile neu bauen */
        $pagecontent = $txt[1]." hier war mal ein Link ".$txt[6];
      }
      Wieso verwendest Du nicht einfach preg_replace()?

      Stimmt, ich frage mich auch ob ich auf dem Holzweg bin. Hier steht in $inhalt der HTML-Quelltext einer Seite drinnen, die img-Elemente sollen ersetzt werden durch: Bild-Alt = Inhalt des alt-Attributes und Bild-Title = Inhalt des Title-Attributs.

      preg_match_all("/<img.id="(.*)".src="(.*)".title="(.*)".alt="(.*)"./>/U",$inhalt,$bilder,PREG_SET_ORDER);
      foreach ($bilder as $x => $val)
      {
        $bildelement = $bilder[$x][0];
        $bildelement = addcslashes($bildelement,""/");
        $inhalt = preg_replace('/' . $bildelement . '/sU',"<p>Bild-Alttag:" . $bilder[$x][3] . "</p>" . "<p>Bild-Title:" . $bilder[$x][4] . "</p> ",$inhalt);
      }

      Holzweg? Falscher Weg? Einbahnstraße? Achtung Abgrund?

      ? und Beste Grüße
      Viennamade