有关说明,请参阅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都很陌生,特别是我对大括号之间的代码以及它是如何发挥作用感到困惑。
答案 0 :(得分:11)
大括号内的代码是sub
用于替换匹配的块:
在块形式中[...]块返回的值将替换每次调用时的匹配。
块接收匹配作为参数,但通常的正则表达式变量($1
,$2
,...)也可用。
在这种特定情况下,广告块中的$1
为"two"
,array notation提取$1
的第一个字符(此为"t"
案件)。因此,该块返回"t"
,而sub
仅使用"two"
替换原始字符串中的"t"
。