Versuchen Sie es mit:
%Vor%Dies gibt den Dateinamen ohne Verzeichnisse zurück.
Beispiel:
%Vor%Outupt:
%Vor%Dies umfasst alle Spektrenverzeichnisse, nachgestellte oder startende Schrägstriche.
Alle anderen hier bisher nicht ...
%Vor%Druckt
%Vor%............................................... ........................BEARBEITEN......................... .................................................. .
Erklärung für Uday. Es war eigentlich ziemlich kompliziert, und ich bin mir nicht sicher, ob ich heute für alles argumentieren kann, aber ich werde es versuchen:)
%Vor%0: Gesamter regulärer Ausdruck
%Vor%1: Beginnt mit
%Vor%2: Ein Schrägstrich oder ein Schrägstrich (ja, vier Schrägstriche für einen, verrückt!). Einmal oder gar nicht, also nicht erforderlich.
%Vor%3: Dieser Schritt ist der komplizierte. Es ist beabsichtigt, alles außer dem letzten zu übergehen, das genau diesem Muster entspricht, einer nicht einfangenden Gruppe (?: ...) würden wir jedes Zeichen mehrmals suchen, gefolgt von einem Schrägstrich.
Die Gruppe kann viele Male wiederholt werden, aber sie ist nicht gierig. Es heißt also, tue dies, außer bis du den folgenden Regex gefunden hast, der in 4 erklärt wurde.
Dieses ganze Stück ist jedoch nicht erforderlich, wegen der? außerhalb der Klammern. Zum Beispiel wird "/RandomFile.pdf/" hier keine Übereinstimmung erzeugen und mit 4 fortfahren.
Aber jetzt finde ich das ein bisschen seltsam, da. + ist gierig, immer noch freut es sich auf den Schrägstrich für das Spiel. Es kann die Art von Gruppen sein, dass sie nicht gierig sind oder ein Fehler in der Java-Syntax.
%Vor%4: Da die Regex für die gesamte Zeichenfolge gilt, muss sie auch bis zum Ende übereinstimmen. Das vorherige Match bei 3 war nicht gierig und zögerte mit + ?, was bedeutet, dass es nur zusammenpassen wird, solange die Regex nach ihr nicht passt. Unser Wort ist am Ende $ ist innerhalb der Klammern, die mit einem Schrägstrich enden können oder nicht. Ich habe gewählt, den Wurzelweg als der Dateiname zurückzugeben, wenn es keinen Dateinamen, aber nur einen Schrägstrich gibt, da es auch ein Dateiname (Verzeichnisname)
ist5: Die Klammern sind eine einfangende Gruppe, die wir am Ende zurückgeben.
Ich hoffe, dies verdeutlicht ein wenig.
Verwenden Sie ersetzen durch Regex, String name = directory.replaceAll(".*/","")
, einfach so.
Die vorherigen Antworten sind alle einfacher als die Verwendung eines vollständigen regulären Ausdrucks. Wenn Sie jedoch wirklich eines verwenden möchten, können Sie hier ein Regex-Muster verwenden: ". * / (. +)"
%Vor%Wie Sie an den anderen Antworten sehen können, ist dies mehr Code, als unbedingt erforderlich ist. Wenn Sie jedoch anspruchsvollere Mustervergleiche und die Extraktion von Strings durchführen, sind reguläre Ausdrücke ein guter Weg.
Wenn Sie mit einem Dateipfad arbeiten, der von einem Browser an einen Webserver übergeben wurde, können Sie nicht sicher sein, ob es sich um einen DOS-Pfad, einen Unix-Stil oder nur einen Dateinamen ohne Pfad handelt. Wenn Sie wirklich eine RegEx möchten, sollte dies tun:
%Vor%Dies funktioniert, egal ob es einen DOS-, Unix- oder abwesenden Pfad gibt.
Es wäre jedoch besser lesbar, Teilstrings als Dogbane schlägt vor, , aber Hinzufügen von Logik, um für beide Arten von Dateitrennzeichen zu überprüfen (wieder nur, wenn Sie mit Multi-Plattform-Eingabe beschäftigen).