使用Ruby 2.2
我有如下字符串:
为了从上面显示的字符串中提取星期几,我编写了以下正则表达式:
/\b(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday)\b/
尝试使用String#match
实例方法时,match_data不会返回所有匹配项。例如,请参考下面显示的irb输出,其中当字符串Weekly on Tuesday and Friday
与上面显示的正则表达式匹配时,MatchData
包含contains 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仅包含第一个匹配项吗?我确定我的正则表达式会丢失某些东西,但我无法弄清楚。
笔记
如在http://rubular.com/r/XZmrHPkjEk上看到的,Rubular显示了相同正则表达式的正确匹配组
似乎MatchData
by.match()
方法返回的结果仅返回与所有捕获的组的第一个匹配项(如果有)。我刚刚测试过,与只能得到1场比赛.match()
。
请参阅Regular-Expressions.info详细信息:
要测试特定的正则表达式是否匹配字符串(的一部分),可以使用=〜运算符,调用正则表达式对象的match()方法,例如:如果subject =〜/ regex /,则打印“ success”或打印“ success”如果/regex/.match(subject)。
另外,从这里:
String.=~(Regexp)
返回第一个匹配项的起始位置;如果未找到匹配项,则返回nil
要获取所有匹配项,您需要使用.scan()
方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句