uepselon: Reguläre Ausdrücke

Hallo,

ich hab nochmal ein Problem mit Regulären Ausdrücken
und zwar habe ich einen String:

$str = "my="custom.tpl";my="base.tpl"";

Sieht im Browser dann so aus -> my="custom.tpl";my="base.tpl"
Nun will ich nach den Dateinamen suchen und diese alle in ein Array speichern.
Hab als ansatz ereg() versucht:

ereg ("="(.*.tpl)",$str,$reg);

echo $reg[1];

enthält der String nur einen Dateinamen Funktioniert es, sobald es zwei werden tun sich zwei
Probleme auf:

1. Gesucht wird von =" bis zum letzten .tpl und nicht bis zum nächsten.
   Hab auch schon mit ? probiert aber das geht irgednwie nur in Perl
2. Wie schaffe ich es alle Dateien auf einen Schlag in ein Array zu bekommen?

Gruß

ueps

  1. Hallo Y

    schau Dir mal das an

    http://www.php.net/manual/en/function.preg-match-all.php

    und auch

    http://www.php.net/manual/en/pcre.pattern.modifiers.php

    bes. U - ungreedy

    damit solltest Du eine Lösung "zusammenschrauben" können

    Viele Grüße

    lulu

    1. Hi,

      Danke das hat mir schon mal weitergeholfen, hab nun folgendes
      mal probiert:

      $str = "my="custom.html";my="base.tpl";;mas='true.tpl'";

      preg_match_all ("/="/",$str,$reg);

      for ($i=0; $i< count($reg[0]); $i++) {
      $site = $reg[1][$i];
      $str = preg_replace("/$site/","shop.php?$site",$str);

      }

      echo $str;

      Das klaptt auch wenn nur .tpl Links im String sind, nur wenn
      z.B. ein normaler .html Link drin ist sucht preg_match_all
      von =" bis zum nächsten .tpl was natürlich unweigerlich zu fehlern führt.

      Kann mir evtl. jemand sagen wie der Ausdruck aussehen muss damit wirklich nur die links in denen *.tpl vorkommt ins array geschrieben werden.

      Thx

      ueps

      1. Hallo!

        $str = "my="custom.html";my="base.tpl";;mas='true.tpl'";

        preg_match_all ("/="/",$str,$reg);

        ^^^^^^^^^^^^^
        wäre da mein Vorschlag. Damit hast Du alle Endungen die aus großen und kleinen Buchstaben bestehen, von 2-4 Zeichen länge abgedeckt!

        for ($i=0; $i< count($reg[0]); $i++) {

        $site = $reg[1][$i];
        $str = preg_replace("/$site/","shop.php?$site",$str);

        }

        Grüße
        Andreas

        1. Hi!

          preg_match_all ("/="/",$str,$reg);

          ^
          vielleicht doch lieber 5, dann ist auch sowas wie .shtml mit abgedeckt!

          Grüße
          Andreas