gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 07:33:08 33 4
gpt4 key购买 nike

考虑以下片段:

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

这会打印 ( as seen on ideone.com ):

hello hello \0 \0

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

hello \0 \hello \\0

我的论点是 \ 是一个转义符,所以你写 \\ 来得到一个文字反斜杠,因此 \\0 是文字反斜杠 \ 后跟 0 等。显然这不是 gsub 解释它的方式,所以有人可以解释发生了什么吗?

我需要做什么才能得到上面我想要的替代品?

最佳答案

使用单引号而不是双引号时转义是有限的:

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

"\0" 是空字符(即在 C 中用于确定字符串的结尾),其中 '\0' "\\0",因此 'hello'.gsub(/.+/, '\0')'hello'.gsub(/.+/, "\\0") 返回 "hello",但是 'hello'.gsub(/.+/, "\0") 返回 “\000”。现在 'hello'.gsub(/.+/, '\\0') 返回 'hello' 是 ruby​​ 试图处理程序员不保持 single 和记住双引号。其实这和gsub没有关系:'\0' == "\\0" and '\\0' == "\\0”。按照这个逻辑,无论您怎么想,这就是 ruby​​ 看待其他字符串的方式:'\\\0''\\\\0' 都相等"\\\\0",(打印时)为您提供 \\0。由于 gsub 使用 \x 插入匹配号 x,您需要一种方法来转义 \x,即 \\x,或者在其字符串表示:"\\\\x"

因此行

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

确实导致了

hello \0 \hello \\0

关于ruby - gsub 中的反斜杠(转义和反向引用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3028547/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com