gpt4 book ai didi

ruby - 字符串文字中的转义状态作为 `String#tr` 的参数

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

对于作为 String#tr 参数的单引号字符串文字中反斜杠的转义状态,我觉得有些神秘。你能解释一下下面三个例子之间的对比吗?我特别不明白第二个。为了避免复杂化,我在这里使用了 'd',在双引号中转义时不会改变含义 ("\d" = "d")。

'\\'.tr('\\', 'x')      #=> "x"
'\\'.tr('\\d', 'x') #=> "\\"
'\\'.tr('\\\d', 'x') #=> "x"

最佳答案

tr 中转义

tr 的第一个参数非常类似于正则表达式中的括号字符分组。您可以在表达式的开头使用 ^ 来否定匹配(替换任何不匹配的内容)并使用例如a-f 来匹配一个字符范围。因为它有控制字符,它也在内部转义,所以你可以使用 -^ 作为文字字符。

print 'abcdef'.tr('b-e', 'x')  # axxxxf
print 'abcdef'.tr('b\-e', 'x') # axcdxf

在 Ruby 单引号字符串中转义

此外,当使用单引号时,Ruby 会尝试尽可能包含反斜杠,即当它不用于实际转义另一个反斜杠或单引号时。

# Single quotes
print '\\' # \
print '\d' # \d
print '\\d' # \d
print '\\\d' # \\d

# Double quotes
print "\\" # \
print "\d" # d
print "\\d" # \d
print "\\\d" # \d

例子重温

考虑到所有这些,让我们再次看一下示例。

'\\'.tr('\\', 'x')      #=> "x"

定义为 '\\' 的字符串成为文字字符串 \ 因为第一个反斜杠转义了第二个反斜杠。没有惊喜。

'\\'.tr('\\d', 'x')     #=> "\\"

定义为 '\\d' 的字符串成为文字字符串 \dtr 引擎依次使用文字字符串中的反斜杠来转义 d。结果:trd 的实例替换为 x。

'\\'.tr('\\\d', 'x')    #=> "x"

定义为 '\\\d' 的字符串变为文字 \\d。首先 \\ 变成 \。然后 \d 变成 \d,即保留反斜杠。 (这种特殊行为不同于双字符串,反斜杠会被活活吃掉,只留下一个孤独的d)

然后,文字字符串 \\d 使 tr 将所有反斜杠或 d 字符替换为替换字符串。

关于ruby - 字符串文字中的转义状态作为 `String#tr` 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5926457/

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