2012-12-31 41 views
0

我有以下字符串,需要用rails中的空字符替換。遵循許多教程和文檔。請幫我實現這一點。正則表達式匹配在rails應用程序中

字符串:

/home/<someword>/dbdumps/backup.sql 

被替換爲:

backup 
+0

你需要確保'/家居/'開始,在'/ dbdumps /'將會匹配結尾只是路徑?中間只有一個目錄?而「備份」是不變還是變量? –

+0

啊,對不起。我甚至不知道它是否是backup.sql。就是這樣。 /home//dbdumps/ .sql我只想要somename出來 – Medhamsh

回答

0

如果 「someword」 是改變你甚至不需要正則表達式的唯一的事情。 假設

path = "/home/<someword>/dbdumps/backup.sql" 

然後

path.split("/").last.split(".").first 

返回

=> "backup" 
+0

實際上,無論是以/ home /開頭還是以'/ dbdumps /'或它包含的目錄數。所以,這可能不是什麼@Medhamsh打算做... –

+0

在Rails應用程序我做了淨:SSH:start()和運行ssh.exec(「LS /home/*/dbdumps/*.sql」)!我將輸出發送到一個字符串,然後我必須顯示文件列表。爲此,我將輸出轉換爲字符串並嘗試執行gsub。這是正確的方法嗎? – Medhamsh

+0

你應該把它放在原始問題中,讓你更清楚你想要做什麼。 – Max

0

最簡單的解決方案將是一個GSUB(字符串替換)如下所示:

string = "home/<someword>/dbdumps/backup.sql" 
new_string = string.gsub(%r{home/(.*)/dbdumps/backup.sql}, 'backup') 

這是一個簡單字符串替換的例子。

1

要從路徑得到的文件名,我會用File#basename

File.basename('/home/<someword>/dbdumps/backup.sql', '.sql') 
#=> 'backup' 
0

在Rails應用程序我做了淨:SSH:start()和運行ssh.exec(「LS!/home//dbdumps/ .sql')。我是?將輸出發送到一個字符串,然後我必須顯示文件列表。爲此,我將輸出轉換爲字符串並嘗試執行gsub。這是正確的方法嗎?

我不認爲它漂亮(天真的代碼,沒有錯誤檢查,循環與請求),但是這樣的事情可以爲你做這項工作。這取決於您是否希望僅以備份名稱或完整路徑結束。

ssh.exec!("ls -l /home/") do |channel, stream, data| 
    directories << data if stream == :stdout 
end 

directories.each do |dir| 
    ssh.exec!("ls -l /home/" + dir + "dbdumps") do |channel, stream, data| 
    backup_names << /home/" + dir + "/" + data if stream == :stdout 
    end 
end 

希望這有助於