tester: Script zu langsam: preg_match...

moin

hab in meinem script folgendes eingebaut, da ich es wirklich in dieser ausführung brauche:
preg_match("°(.*?);(.*?);(.*?);(.*?);(.*?);(.*?);(.*?);(.*?);(.*?);(.*?);(.*?);(.*?);(.*?);(.*?);(.*?);(.*?)\r\n°s",$datei_zeile,$arr_content_zeile);
nun wird das zeit limit überschritten, d.h. dauert länger als 30 sec.
auf meinem schnellen rechner zuhause lässt es sich in 5-10 sec problemlos durchführen.
was könnte ich schreiben, um exakt das selbe ergebnis in dem ergebniss array $arr_content_zeile zu erhalten?

danke

  1. Hallo tester,

    [...]
    preg_match("°(.*?);(.*?);(.*?);(.*?);(.*?);(.*?);(.*?);(.*?);(.*?);(.*?);(.*?);(.*?);(.*?);(.*?);(.*?);(.*?)\r\n°s",$datei_zeile,$arr_content_zeile);
    [...]
    was könnte ich schreiben, um exakt das selbe ergebnis in dem
    ergebniss array $arr_content_zeile zu erhalten?

    Wesentlich schneller (da keine Endlos-Schleife):

    ~([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*);([^;]*)\r\n

    Wenn du das * noch in ein + umwandeln kannst, wird es nochmal
    schneller, da der Automat dann noch eher terminieren kann. Ansonsten
    sieht es mir eher nach einer Aufgabe fuer split() aus als fuer
    Regexe. Ein split(';',$datei_zeile) mit einer anschliessenden
    Pruefung auf die Laenge ist wesentlich schneller, da kein Pattern
    matching angewendet werden muss.

    Grüße,
     CK

    --
    Beware Evildoers for my deed is done and every little damsel in distress will be shelted!
    http://wwwtech.de/
    1. Hallo Christian,

      sieht es mir eher nach einer Aufgabe fuer split() aus als fuer
      Regexe. Ein split(';',$datei_zeile) mit einer anschliessenden
      Pruefung auf die Laenge ist wesentlich schneller, da kein Pattern
      matching angewendet werden muss.

      ich würde aber eher explode verwenden, da mit split wieder ein
      regulärer Ausdruck verwendet wird.

      Grüße aus Nürnberg
      Tobias

      1. Hallo Tobias,

        sieht es mir eher nach einer Aufgabe fuer split() aus als fuer
        Regexe. Ein split(';',$datei_zeile) mit einer anschliessenden
        Pruefung auf die Laenge ist wesentlich schneller, da kein Pattern
        matching angewendet werden muss.
        ich würde aber eher explode verwenden, da mit split wieder ein
        regulärer Ausdruck verwendet wird.

        Ist das so? Danke, wieder was gelernt.

        Grüße,
         CK

        --
        Es ist uns nicht möglich, in einem Bereich unseres Lebens richtig zu verhalten, wenn wir in allen anderen falsch handeln. Das Leben ist ein unteilbares Ganzes.
        http://wwwtech.de/
        1. Hallo,

          ich würde aber eher explode verwenden, da mit split wieder ein
          regulärer Ausdruck verwendet wird.
          Ist das so? Danke, wieder was gelernt.

          Siehe http://de2.php.net/manual/de/function.split.php, der Tipp unter der Beschreibung.
          Ich hatte gedacht, dass split auch nur ein Alias auf explode wäre, so wie bei join und implode.

          Freundliche Grüsse,

          Vinzenz