使用 Ruby 2.2
我有如下字符串:
- 每周二和周五
- 每周一、周三和周六
- 每月每两周的星期一
为了从上面显示的字符串中提取星期几,我编写了以下正则表达式:
/\b(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday)\b/
尝试使用String#match
实例方法时,match_data 不会返回所有匹配项。例如,请参考下面显示的 irb 输出,其中当字符串Weekly on Tuesday and Friday
与上面显示的正则表达式匹配时,MatchData
仅包含Tuesday
. 我预计它Friday
也会包含。
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所示