Ruby Koans - Regex和.sub:不理解答案背后的原因

时间:2011-05-29 17:53:31

标签: ruby regex

有关说明,请参阅about_regular_expressions.rb文件中我遇到问题的确切问题:

def test_sub_is_like_find_and_replace
    assert_equal __, "one two-three".sub(/(t\w*)/) { $1[0, 1] }
end

我知道答案是什么,但我不明白为了得到答案会发生什么。我对Ruby和regex都很陌生,特别是我对大括号之间的代码以及它是如何发挥作用感到困惑。

1 个答案:

答案 0 :(得分:11)

大括号内的代码是sub用于替换匹配的块:

  

在块形式中[...]块返回的值将替换每次调用时的匹配。

块接收匹配作为参数,但通常的正则表达式变量($1$2,...)也可用。

在这种特定情况下,广告块中的$1"two"array notation提取$1的第一个字符(此为"t"案件)。因此,该块返回"t",而sub仅使用"two"替换原始字符串中的"t"