Zum Inhalt springen

RegExp: Dateinamen erkennen


Empfohlene Beiträge

Hi,

Ich bin auf der Suche nach einer RegExp, mit der ich Pfad und Dateinamen ausfiltern kann.

Zum Verständnis mal ein Beispiel:

Ich habe einen String der z.B. so aussieht:

/var/tmp/user Nummer/test.txt

Den String zerlegt ich mit preg_match_all (php) in die einzelnen Bestandteile (Pfad bzw. Verz.namen und Dateinamen).

Fürs erste hab ich folgende RegExp benutzt


[\w\s\.]+

Damit also alle Buchstaben, Leerzeichen und den Punkt beachtet. Ein Dateiname kann ja aber noch mehr Zeichen beinhalten. Sonderzeichen (wie z.B. Umlaute) werden so nicht beachtet. Für den Dateinamen sind alle Sonderzeichen bis auf \ / : * ? " < > | zulässig (unter Win zumindest). Ein Ausdruck wie z.B.

.*^\^/^: 

(also alle Zeichen bis auf die angegebenen) geht aber nicht.

Hat jemand eine Idee für einen passenden Ausdruck um alle Verz. und Dateinamen zu bekommen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was spricht denn gegen die eingebauten Funktionen basename() und dirname()?

Dass die Dateinamen + Pfade aus einer Logdatei kommen und mit dem Server auf dem das Skript läuft nichts zu tun haben.

EDIT:

Ok, die Funktion würde wohl gehen, ist ja nicht vom FS abhängig. Ich will aber alle Namen einzeln. Deswegen auch der preg_match_all.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Warum splittest du dann nicht einfach den String mittels explode().

Das hab ich mir auch gerade so überlegt. Die RegExp ist eh in der Configdatei und für jede Installation einstellbar, außerdem wird in die Logdatei wohl auf jeden Fall ein / als Trennzeichen verwendet (Wie es auf einem Windowsserver aussieht konnte mir keiner sagen und testen ging auch nicht). Aber da kann man dann ja das Zeichen in der Config ändern.

Manchmal macht man sich eben zu viele komplizierte Gedanken ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das Problem ist schon längst gelöst.

Es ging mir auch nicht nur um ein "echo "Filename: ".$file; ".

@baba007: Es ist egal wo es läuft.

Ich hatte für andere Auswertungen der Logeinträge schon RegExp benutzt, kein Problem. Beim Dateinamen (und dem kompletten Pfad) wollte ich dass dann auch so machen. Das Problem war eben, dass viele Zeichen enthalten sein können, aber nicht alle. Ein "/" kann aber auf keinen Fall enthalten sein, und deswegen mach ich es jetzt auch mit Explode (wie oben schon geschrieben).

Manchmal denkt man einfach zu kompliziert, wenn man eh schon gerade was in der Art gemacht hat.

Der Trenner für Explode kann frei eingestellt werden. Aber das ist eh egal, weil auch auf einem Windows-Server ein "/" in der Log-Datei steht. Das liegt wohl daran, dass das Programm (rsync-Daemon) urspr. aus der Unix-Welt stammt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...