Tom: Glob() und erlaubte Patterns

Hello,

im Manual zu glob()
http://de3.php.net/manual/de/function.glob.php
steht für die erlaubten Patterns leider nur ein impliziter Verweis auf
http://pubs.opengroup.org/onlinepubs/007904875/functions/glob.html

Ich muss ein Muster abbilden, das z.B. so aussieht

talkfile.txt_20120727_194515_tom

Um Dateinamen mit diesem Muster nun aus der großen Menge ähnlicher Namen herauszufischen habe ich bisher

  
    $path = rtrim($_SERVER['DOCUMENT_ROOT'],'/') . '/../data/';  
    $filename = "talkfile.txt";  
    $_files = glob ($path.$filename . '_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9][0-9][0-9]_*');  

benutzt. Entweder ich habe mich zu blöd angestellt, oder aber Wiederholung {8} funktioniert hier nicht? Muss ich das Muster wirklich so explizit ausführen?

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
 ☻_
/▌
/ \ Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de
  1. Hallo,
    zum eigentlichen Problem kann ich nix beitragen, aber zu

    Ich muss ein Muster abbilden, das z.B. so aussieht

    talkfile.txt_20120727_194515_tom

    und

    '_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9][0-9][0-9]_'

    fällt mir auf, dass da wahrscheinlich
    '_20[0-9][0-9][0-1][0-9][0-3][0-9]_[0-2][0-9][0-5][0-9][0-5][0-9]_'
    stehen könnte.

    Gruß
    Kalk

    1. Hello,

      zum eigentlichen Problem kann ich nix beitragen, aber zu

      Ich muss ein Muster abbilden, das z.B. so aussieht

      talkfile.txt_20120727_194515_tom

      und

      '_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9][0-9][0-9]_'

      fällt mir auf, dass da wahrscheinlich
      '_20[0-9][0-9][0-1][0-9][0-3][0-9]_[0-2][0-9][0-5][0-9][0-5][0-9]_'
      stehen könnte.

      vermutlich hast Du Recht damit. Aber da es keine "falschen" Dateinamen geben darf, kann man hier auch ein vereifachtes Muster benutzen.

      Mein Wunsch wäre eben

      $blah . '_[0-9]{8}_[0-9]{6}_*'

      gewesen. Aber das scheint so nicht zu funktionieren oder ich habe einen Fehler in meinen Tests.

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
  2. Muss ich das Muster wirklich so explizit ausführen?

    http://de3.php.net/manual/de/function.glob.php

    Zitat:

    "Die Übereinstimmung wird nach den gleichen Regeln geprüft, wie in der glob()-Funktion der C-Bibliothek und entspricht weitgehend den Regeln in den üblichen Kommandozeilen-Shells."

    Die Dokumentation erwartet hier offensichtlich tiefer gehende Kenntnisse. Was glob() als "Pattern" erwartet entspricht dem, was Linux bei einem ls erwartet.

    Das "Pattern" hier nicht das selbe meint wie bei einem regulären Ausdruck steht fest, so steht ja ein * für eine beliebige Anzahl beliebiger Zeichen. Wenn Du also reguläre(sic) reguläre(sic) Ausdrücke benutzen willst, dann kommst Du  nicht umhin dir alle Dateisystemeinträge zurückgeben zu lassen und dann mit preg_match()zu untersuchen.

    Fred

    1. Hello,

      Muss ich das Muster wirklich so explizit ausführen?

      http://de3.php.net/manual/de/function.glob.php

      Zitat:

      "Die Übereinstimmung wird nach den gleichen Regeln geprüft, wie in der glob()-Funktion der C-Bibliothek und entspricht weitgehend den Regeln in den üblichen Kommandozeilen-Shells."

      Die Dokumentation erwartet hier offensichtlich tiefer gehende Kenntnisse. Was glob() als "Pattern" erwartet entspricht dem, was Linux bei einem ls erwartet.

      Das "Pattern" hier nicht das selbe meint wie bei einem regulären Ausdruck steht fest, so steht ja ein * für eine beliebige Anzahl beliebiger Zeichen. Wenn Du also reguläre(sic) reguläre(sic) Ausdrücke benutzen willst, dann kommst Du  nicht umhin dir alle Dateisystemeinträge zurückgeben zu lassen und dann mit preg_match()zu untersuchen.

      So weit war ich doch schon mal? Ist das jetzt eine Wiederholungssendung? :-P

      Für mich ist leider bisher nicht klar, obwohl ich mich doch darum bemüht habe (siehe Link), was die C-Bibliothek und die Regeln der Kommandozeilen-Shells hier zulassen und ermöglichen. Irgendwann hatte ich mir auch schon mal eine ganze Reihe von Beispielen erarbeitet und die auch den Fritzen von PHP gesendet für die Doku, abe die sind derartig arrogant, dass sie das nur mit einem lakonischen NIH abgelehnt haben. Die Doku würde an dieser Stelle sowieso überarbeitet werden...

      Das ist nach meinem Gedächtnis ca. 3 Jahre her. Nun finde ich leider meine Zusammenstellung auch nicht wieder und muss wohl von vorne anfangen. Kann sein, dass ich dir irgendwo wohlfeil auf Papier gedruckt noch habe - nur WO?

      Ich dachte, Ihr könntet mir dabei helfen, die Möglichkeiten erneut zu suchen?

      Da war auch noch was mit dem Schalter GLOB_BRACE... Der ermöglichte auch mehr, als man vermutet hat.

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Hello,

        Muss ich das Muster wirklich so explizit ausführen?

        http://de3.php.net/manual/de/function.glob.php

        Zitat:

        "Die Übereinstimmung wird nach den gleichen Regeln geprüft, wie in der glob()-Funktion der C-Bibliothek und entspricht weitgehend den Regeln in den üblichen Kommandozeilen-Shells."

        So weit war ich doch schon mal? Ist das jetzt eine Wiederholungssendung? :-P

        Woher soll ich wissen, wie weit Du schon warst? Bei mir gibt jedenfalls ein

        ~> man n glob
        und/oder
        ~> man 7 glob

        einiges zu "Pattern" her.

        1. Hello,

          Woher soll ich wissen, wie weit Du schon warst? Bei mir gibt jedenfalls ein

          ~> man n glob
          und/oder
          ~> man 7 glob

          einiges zu "Pattern" her.

          Ach ja, da war doch mal 'was :-)

          GLOB_BRACE
                      Expand  csh(1)  style  brace  expressions  of  the  form {a,b}.  Brace expressions can
                      be nested.  Thus, for example, specifying the pattern
                      "{foo/{,cat,dog},bar}" would return the same results as four separate glob() calls
                      using the  strings:  "foo/",  "foo/cat",  "foo/dog",  and "bar".

          Das muss ich nochmal ausprobieren im PHP-glob().

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
           ☻_
          /▌
          / \ Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de