2011-05-13 34 views
1

我有一個像/sdcard/filename.pdf正則表達式用於獲取文件名

串任何一個可以讓我的正則表達式來從整個路徑的「文件名」的字符串。

感謝進階:)

+1

您的編程語言可能具有解析路徑的特定功能。 – 2011-05-13 11:40:13

回答

6
[^\/]+$ 

測試online here on Rubular

的假設是,你的字符串是唯一的路徑。

$字符串 [^\/]將匹配任何東西,除了/ +手段匹配前面的字符([^\/])的結尾匹配至少一次

因此,這將在字符串中匹配最後/後什麼結束。

+0

該測試儀鏈接爲+1 – Jana 2011-05-13 11:52:23

0

如果你想要的一切後終於/,​​你可以這樣做

String fileName = pathString.substring(pathString.lastIndexOf("/"),pathString.length()); 

其中pathString是字符串中的路徑名。(顯然,如果lastIndexOf返回null,這將失敗,所以你需要一個位錯誤檢查。)

/([^\/]+)$/這樣的模式也應該工作。

0

正則表達式很簡單,那就是:

/[\w-_]+/([\w-_]+)\.pdf 

括號是在你的「文件名」的一部分,因此,你可以因此從整個路徑提取出來。您可以在第一個匹配組中找到它,組(1)在組(0)之後。

如果您將擁有任意文件夾深度的文件路徑,例如/home/myhome/pdf-store/filename.pdf,你可以使用:

(/[\w-_]+)*/([\w-_]+)\.pdf 

,那麼你會評估第二組的文件名,因爲第一組表示文件夾路徑即可。即你在組(2)中有。

+1

我確定'\ w-_'沒有達到您期望的效果。如果不想轉義字符類,請將字符類的開始或結尾('[ - \ w]')放入'-',否則會定義一個字符範圍。 '_'已包含在'\ w'中。 – stema 2011-05-13 11:37:52

0
"/[^/]+/([^\.]+)\..+" 

文件名處於第一反向引用。