2009-06-04 6 views

Antwort

0

Dieser Ausdruck wird die Aufgabe erledigen.

^.*/(?<filename>[^/]+?\.[^/]+)$ 
 
    ^    Anchor to the begining of the string 
    .*    Any character zero or more times 
    /    Slash 
    (?<filename>  Named group 'filename' 
     [^/]+?   Not a slash at least once and captured lazily 
     \.    One file extension separator (dot) 
     [^/]+    Not a slash at leats once 
    )     End of named group 
    $     Anchor to the end of the string 
+0

Vielen Dank für das Lesen zwischen den Zeilen :) –

+0

Ich lese zuerst zwischen den Zeilen. Aber während es den allgemeinen Fall des Problems nicht löst, wird es Sonderfälle lösen und Sie sind wahrscheinlich nach einem Sonderfall, wie die modifizierte Frage anzeigt. –

2

Sie könnten das Ende untersuchen, um zu sehen, ob es wie eine Dateierweiterung aussieht, aber URLs nicht tatsächlich zu Dateien zuordnen; Was passiert, wenn die URL neu geschrieben wird?

Wenn Sie wollten eine bestimmte URL aufgelöst, um zu bestimmen, was könnten Sie eine HEAD Anforderung ausgeben und prüfen Sie die content-type und content-disposition Header zu sehen, ob der Inhalt einer Art ist, die eine zugrunde liegende Datei schon sagt, aber auch das ist nicht kugelsicher, da Bilder, PDF usw. alle dynamisch erzeugt werden könnten.

1

Sie können nicht.

z. http://example.com/files/readme könnte eine Textdatei oder ein Ordner sein (* Nix-Stil-Betriebssysteme würden konventionell keine .txt Erweiterung hinzufügen).

Auch wenn es eine Dateierweiterung gibt, gibt es möglicherweise keine Datei mit serverseitigem Code, der die URL verarbeitet, um Inhalt zu erstellen (z. B. ein ASP.NET HttpHandler).

Warum versuchen Sie dies zu tun? Wenn Sie herausfinden möchten, ob die URL eine Datei zurückgibt, können Sie mit der Erweiterung raten (denken Sie daran, dass Anwendungen ihre eigenen erfinden können), aber die einzige wirkliche Möglichkeit besteht darin, eine HTTP HEAD-Anfrage auszuführen und den zurückgegebenen Inhaltstyp zu prüfen (aber wieder haben Sie das gleiche Problem mit dem, was eine gültige Datei MIME-Typ ist).

+0

ich brauche, um festzustellen, ob eine URL von einem Benutzer eingegeben ist ein Versuch, eine Datei auf dem System zu verbinden oder nicht. –

+0

@Adam: erweitert. – Richard

Verwandte Themen