Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

RegExp: Dateinamen erkennen

Empfohlene Antworten

Veröffentlicht

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?

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.

Warum splittest du dann nicht einfach den String mittels explode(). Als Trennzeichen nimmst du DIRECTORY_SEPARATOR. Damit erhälst du alle Teile schön einzeln.

Es denn du willst wirklich alles auf einmal. Sonst durchlaufe einfach alle Zeilen in einer Schleife.

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 ;)

Hmmm, was mir noch einfallen würde, wäre:

/(^.*[\/\\])(.*$)/

Alle Zeichen bis zum letzten / oder \ (also der Pfadname) stehen dann in $1 und der Dateiname in $2.

Ist allerdings fast ungetestet! ;)

ICQ

hey

wie ein vordermann schon erwähnt hat:


$string = "/var/tmp/user Nummer/test.txt";
$file = basename($string);
$dir = explode("/",$string);

echo "Directories:";
foreach($dir as $key) {
echo "; ".$dir." ";
}
echo "Filename: ".$file;
[/php]

gruß

läuft es auf einer Unixmaschine oder Windows ?

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.