rails应用程序中的正则表达式匹配

时间:2012-12-31 07:01:47

标签: ruby-on-rails ruby regex redmine

我有以下字符串需要由rails中的空字符替换。遵循了许多教程和文档。请帮我实现这个目标。

字符串:

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

被替换为:

backup

4 个答案:

答案 0 :(得分:1)

要从路径获取文件名,我会使用File#basename

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

答案 1 :(得分:0)

如果“someword”是唯一改变你甚至不需要正则表达式的东西。 假设

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

然后

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

返回

=> "backup" 

答案 2 :(得分:0)

最简单的解决方案是gsub(字符串替换),如下所示:

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

这是字符串替换的一个简单示例。

答案 3 :(得分:0)

  

在rails应用程序中,我执行Net: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

希望这会有所帮助