Ruby str.match(regex)返回仅包含第一个匹配项的MatchData
使用
Ruby 2.2
我有以下字符串: >每周二和周五 要从上面显示的字符串中提取星期几,我写了以下正则表达式: /b(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday)b/ 尝试使用String#match instance方法时,match_data不会返回所有匹配项.对于例如请参考下面显示的irb输出,其中当星期二和星期五的字符串周期与上面显示的正则表达式匹配时,MatchData仅包含星期二.我预计它也包含星期五. 2.2.1 :001 > str = "Weekly on Tuesday and Friday" => "Weekly on Tuesday and Friday" 2.2.1 :002 > regex = /b(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday)b/ => /b(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday)b/ 2.2.1 :003 > str.match(regex) => #<MatchData "Tuesday" 1:"Tuesday"> 2.2.1 :004 > match_data = str.match(regex) => #<MatchData "Tuesday" 1:"Tuesday"> 2.2.1 :005 > match_data.captures => ["Tuesday"] 任何人都可以解释一下,为什么当我没有在我的正则表达式中使用任何开始/结束锚时,MatchData只包含第一个匹配的术语?我相信我的正则表达式错过了一些东西,但我无法理解. 注意 Rubular显示相同正则表达式的正确匹配组,如http://rubular.com/r/XZmrHPkjEk所示 解决方法
似乎
.match() 方法返回的MatchData仅返回与所有捕获组的第一个匹配(如果有).我刚刚测试了它,我只能与.match()匹配1.
见Regular-Expressions.info详细信息:
另外,从here开始:
要获得所有匹配项,您需要使用 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |