gpt4 book ai didi

arrays - "\\1"对比 1 美元。为什么我在 Ruby 中得到不同的结果

转载 作者:太空宇宙 更新时间:2023-11-03 17:46:56 24 4
gpt4 key购买 nike

我在一个较长的脚本中使用它,但一个简短的例子将说明我遇到的问题类型。

my_array2 = ["help", "not", "too"]
my_array2.each do |element|
element.sub!(/(\w{1})(\w+)/,"\\1")
end

# this gives me the expected ['h','n','t']

如果我这样做

my_array2 = ["help", "not", "too"]
my_array2.each do |element|
element.sub!(/(\w{1})(\w+)/, $1)
end

# this gives me ['t','h','n'] (instead of ['h','n','t'] as expected).

这是怎么回事?当我使用 $1 返回第一个正则表达式捕获组时,为什么会得到“偏移”结果?

最佳答案

问题是 $1 是对最后一个正则表达式匹配项中第一组匹配项的引用。它的值是在将其传递给方法 (String#sub!) 时计算的,而不是在匹配完成后计算的。

因此,t 来自您之前使用 \1 进行的实验。如果您打开一个新的 repl 并运行您的第二个示例,您将得到 TypeError: no implicit conversion of nil into String。这是因为在您调用第一个 String#sub!$1nil

关于arrays - "\\1"对比 1 美元。为什么我在 Ruby 中得到不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34663779/

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