Thoralf Knuth: Wildcards -> RegExp

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

  1. 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

    --
    | http://www.selflinux.org/                                                  |
    | http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm                      |
    | sh:) fo:) ch:] rl:( br:> n4:& ie:% mo:) va:) de:] zu:) fl:( js:| ss:) ls:[ |
    | http://emmanuel.dammerer.at/selfcode.html                                  |
    1. 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