加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ruby str.match(regex)返回仅包含第一个匹配项的MatchData

发布时间:2020-12-17 02:23:53 所属栏目:百科 来源:网络整理
导读:使用 Ruby 2.2 我有以下字符串: 每周二和周五 每周一,周三和周六 周一每两周一次 要从上面显示的字符串中提取星期几,我写了以下正则表达式: /b(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday)b/ 尝试使用String#match instance方法时,match
使用 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详细信息:

To test if a particular regex matches (part of) a string,you can
either use the =~ operator,call the regexp object’s match() method,
e.g.: print “success” if subject =~ /regex/ or print “success” if
/regex/.match(subject).

另外,从here开始:

String.=~(Regexp) returns the starting position of the first match or
nil if no match was found

要获得所有匹配项,您需要使用.scan()方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读