首页 文章

在Ruby中转义字符串中的双反斜杠和单反斜杠

提问于
浏览
16

我试图以这种格式在Windows平台上访问我的ruby脚本中的网络路径 .

\\servername\some windows share\folder 1\folder2\

现在,如果我尝试将其用作路径,它将无法工作 . 对于此脚本,没有正确转义单个反斜杠 .

path = "\\servername\some windows share\folder 1\folder2\"
d = Dir.new(path)

我尝试了所有我能想到的东西来正确地逃避路径中的斜线 . 但是我无法摆脱那个单一的反斜杠 - 因为它具有特殊意义 . 我尝试单引号,双引号,转义反斜杠本身,使用替代引号,如%Q {}或%q {},使用ascii转换为char . 从某种意义上讲,我没有做任何事情 . :-)现在临时解决方案是映射网络驱动器N:\指向该路径并以这种方式访问它,但这不是解决方案 .

有谁知道如何正确逃脱单反斜杠?

谢谢

2 回答

  • 13

    试试这个

    puts '\\\\servername\some windows share\folder 1\folder2\\'
    #=> \\servername\some windows share\folder 1\folder2\
    

    只要您使用单引号来定义字符串(例如, 'foo' ),就不需要转义单个 \ . except in the following two cases

    • \\ 本身可以使用 \ . 所以, \\\\ 将为您提供所需的起始 \\ .

    • 路径末尾的尾随 \ 将尝试转义结束报价,因此您还需要 \\ .


    或者,

    你可以为自己定义一个优雅的帮手 . 您可以将 / 与此类方法结合使用,而不是使用笨重的 \ 路径分隔符:

    def windows_path(foo)
      foo.gsub('/', '\\')
    end
    
    puts windows_path '//servername/some windows share/folder 1/folder2/'
    #=> \\servername\some windows share\folder 1\folder2\
    

    甜!

  • 22

    只需加倍每个反斜杠,如下:

    "\\\\servername\\some windows share\\folder 1\\folder2\\"
    

相关问题