Ruby Koans:正则表达式括号“捕获”匹配的内容?
发布时间:2020-12-17 02:32:40 所属栏目:百科 来源:网络整理
导读:我正在浏览about_regular_expressions.rb并且不明白到底发生了什么: def test_variables_can_also_be_used_to_access_captures assert_equal "Gray,James","Name: Gray,James"[/(w+),(w+)/] assert_equal "Gray",$1 assert_equal "James",$2end 在我看来,
我正在浏览about_regular_expressions.rb并且不明白到底发生了什么:
def test_variables_can_also_be_used_to_access_captures assert_equal "Gray,James","Name: Gray,James"[/(w+),(w+)/] assert_equal "Gray",$1 assert_equal "James",$2 end 在我看来,在正则表达式中使用括号会在引擎盖下创建两个新变量($1和$2). 它是否正确? 但后来我这样做了: def test_variables_can_also_be_used_to_access_captures assert_equal "Gray,(w+)/] assert_equal "Smith,Bobert","Name: Smith,Bobert"[/(w+),(w+)/] assert_equal "Smith",$1 assert_equal "Bobert",$2 end 它捕获了“史密斯”和“博伯特”.我想每次使用带括号的新正则表达式时,之前的值都被覆盖了吗? 如果我然后尝试捕获一个单词: def test_variables_can_also_be_used_to_access_captures assert_equal "Gray,$2 assert_equal "Susan,","Name: Susan,whatever"[/(w+),/] assert_equal "Susan",$1 assert_equal nil,$2 end $2已经消失……(不再是“Bobert”) 任何人都可以了解引擎盖下发生的事情吗? 解决方法
你是对的.每次匹配正则表达式时,全局变量$?,$&,…,$1,$2,…都会被覆盖.在你的最后一个例子中,正则表达式没有任何东西可以匹配$2,因为它没有第二个(…)位置,所以nil分配给$2.
如果要交错使用多个匹配的结果,我使用的技术是将匹配数据保存为变量.也就是说,在第一次正则表达式匹配后立即指定变量match1 = $?.然后,继续下一个正则表达式匹配并执行match2 = $?,依此类推.稍后,您可以从这些变量中提取匹配的结果.例如,在执行多个正则表达式匹配后,如果要返回第一个正则表达式匹配时分配的$1的结果,可以通过match1 [1]等调用它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |