Wildcards -> RegExp
Thoralf Knuth
- programmiertechnik
Guten Abend allerseits,
ich sitze an einem Dateimanager in PHP, der ohne FTP auskommt. Im Moment schau ich grade durch die Umsetzung von Wildcards in Regexp's.
Was ich will: Aus einem normalen Wildcard wie zB /www/pub/*.txt einen RegExp für http://www.php.net/manual/de/function.preg-match.php.
Ich will zum Beispiel aus *.txt folgendes machen: preg_match('/(.+.txt$/', $dateiname ).
Wie finde ich am günstigsten heraus, welche für Dateinamen und Pfade zulässigen Zeichen ich für den RegExp escapen muss? (. -> . etc.)
Hat jemand Tipps, was ich beachten sollte?
Gruss, Thoralf
Hallo Thoralf,
Ich will zum Beispiel aus *.txt folgendes machen: preg_match('/(.+.txt$/', $dateiname ).
Was aber falsch ist, denn korrekt wäre /^.*.txt$/ - "*" matched nämlich auch gar nichts:
christian@midnight:~/test$ touch ab.txt
christian@midnight:~/test$ touch b.txt
christian@midnight:~/test$ ls *b.txt
ab.txt b.txt
christian@midnight:~/test$
Wie finde ich am günstigsten heraus, welche für Dateinamen und Pfade zulässigen Zeichen ich für den RegExp escapen muss? (. -> . etc.)
In http://de3.php.net/manual/de/pcre.pattern.syntax.php sind die Zeichen aufgelistet:
"", "^", "$", ".", "[", "]", "|", "(", ")", "?", "*", "+", "{", "}" und noch der Delimiter. Alle bis auf ? und * musst Du nun durch \X ersetzen. (wobei X hier das Zeichen sei) ? musst Du durch . ersetzen und * durch .*
Viele Grüße,
Christian
Hallo Christian,
Ich will zum Beispiel aus *.txt folgendes machen: preg_match('/(.+.txt$/', $dateiname ).
Was aber falsch ist, denn korrekt wäre /^.*.txt$/ - "*" matched nämlich auch gar nichts:
Hast Du völlig recht, war ein Ausschnitt, mit dem ich Dateien gesucht hatte, die nicht nur Erweiterung sondern auch Name im Windows-Sinn haben mussten. Und dann natürlich nicht geändert. ;) Danke, der Fehler hätte sich vermutlich lange im Code gehalten.
In http://de3.php.net/manual/de/pcre.pattern.syntax.php sind die Zeichen aufgelistet:
"", "^", "$", ".", "[", "]", "|", "(", ")", "?", "*", "+", "{", "}" und noch der Delimiter. Alle bis auf ? und * musst Du nun durch \X ersetzen. (wobei X hier das Zeichen sei) ? musst Du durch . ersetzen und * durch .*
Besten Dank, diese Liste habe ich gesucht, wohl nicht gründlich genug. ;)
Gruss, Thoralf