代码之家  ›  专栏  ›  技术社区  ›  polygenelubricants

gsub中的反斜杠(转义和反引用)

  •  4
  • polygenelubricants  · 技术社区  · 14 年前

    puts 'hello'.gsub(/.+/, '\0 \\0 \\\0 \\\\0')
    

    这个指纹( as seen on ideone.com ):

    hello hello \0 \0
    

    这是非常令人惊讶的,因为我希望看到这样的东西:

    hello \0 \hello \\0
    

    我的论点是 \ \\ 得到一个反斜杠 \\0 是一个反斜杠 \ 然后 0 gsub

    我该怎么做才能得到我想要的替代品呢?

    1 回复  |  直到 14 年前
        1
  •  7
  •   Konstantin Haase    14 年前

    使用单引号而不是双引号时,转义受到限制:

    puts 'sinlge\nquote'
    puts "double\nquote"
    

    "\0" '\0' "\\0" 因此两者 'hello'.gsub(/.+/, '\0') 'hello'.gsub(/.+/, "\\0") 返回 "hello" ,但是 'hello'.gsub(/.+/, "\0") "\000" 'hello'.gsub(/.+/, '\\0') 返回 'hello' ruby正在试图处理程序员没有记住单引号和双引号的区别。事实上,这与 gsub : '\0' == "\\0" '\\0' == "\\0" . 按照这个逻辑,不管你怎么想,ruby都是这样看待其他字符串的:两者 '\\\0' '\\\\0' 平等的 "\\\\0" \\0 . gsub使用 \x 要插入匹配号x,需要一种方法来逃脱 \十 ,即 \\x ,或在其字符串表示形式中: "\\\\x" .

    所以这条线

    puts 'hello'.gsub(/.+/, "\\0 \\\\0 \\\\\\0 \\\\\\\\0")
    

    hello \0 \hello \\0