2013-04-30 227 views
1

我一直在尋找RegEX來從代碼中提取包含路徑的文件,以便我可以檢查它們是否存在但最終沒有得到我想要的結果。我猜這很可能是由於缺乏RegEX知識。RegEx從代碼需要路徑獲取路徑和文件名

我對我跑過的每一個RegEx例子都感到有點沮喪,我總是得到沒有路徑的文件的文件名,我的要求在sed有點相當簡單。

/"+/{1,6}+.myext"/

我路徑需要1-6之間深,它需要文件名以一定的延伸,路徑是基於UNIX的,但並不總是開始從正斜槓開始。文件名不能以點開頭。

+0

你的正則表達式(這可能是。無效的語法)看起來不像你描述的那樣。你爲什麼不從這裏開始:[www.regular-expressions.info/](http://www.regular-expressions.info/) – 2013-04-30 22:07:39

+0

你能詳細說一下「但不是始終以正斜槓開始「?他們總是以斜線開始? – perreal 2013-04-30 23:59:04

+1

爲什麼這個問題被標記爲C++? – jogojapan 2013-05-01 00:17:21

回答

1

我試過這個在PowerShell中,它的工作原理,我相信你可以在你的應用程序中使用這樣的東西。

$Matches = @() 
$String = '/this/is/a/long/path/and/Filename.MyExtension' 
if ($String -match '^(/?[^/]+){1,6}/([^/.][^/]*[.]MyExtension)$') { 
    $Matches[2] 
    } # end if 

產生

Filename.MyExtension 

這通過尋找組1和6之間串的每個字符串必須以開始/和字符串繼續通過所有非斜槓字符或字符組必須不能啓動與/

最後一組字符不能以/或開頭。然後是所有非斜槓字符直到所需的點擴展名[在這種情況下,「MyExtension」]

0

我知道這是OP的問題遲到,但會有助於OP和其他嘗試使用正則表達式是regexlib.com;他們有正則表達式的一個大型圖書館,他們也有一個RegEx tester這是非常有幫助的測試你的正則表達式的代碼也Ultrapico's Expresso是創建正則表達式一個非常有用的工具