Glob() und erlaubte Patterns
Tom
- php
0 Tabellenkalk0 Tom
0 Fred Furunkelstein 20120 Tom
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
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
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
Muss ich das Muster wirklich so explizit ausführen?
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
Hello,
Muss ich das Muster wirklich so explizit ausführen?
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
Hello,
Muss ich das Muster wirklich so explizit ausführen?
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.
Hello,
Woher soll ich wissen, wie weit Du schon warst? Bei mir gibt jedenfalls ein
~> man n glob
und/oder
~> man 7 globeiniges 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