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

吉涅什·戈赫尔(Jignesh Gohel)

使用Ruby 2.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显示了相同正则表达式的正确匹配组

维克多·史翠比维

似乎MatchDataby.match()方法返回的结果仅返回与所有捕获的组的第一个匹配项(如果有)。我刚刚测试过,与只能得到1场比赛.match()

请参阅Regular-Expressions.info详细信息:

要测试特定的正则表达式是否匹配字符串(的一部分),可以使用=〜运算符,调用正则表达式对象的match()方法,例如:如果subject =〜/ regex /,则打印“ success”或打印“ success”如果/regex/.match(subject)。

另外,从这里

String.=~(Regexp) 返回第一个匹配项的起始位置;如果未找到匹配项,则返回nil

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Ruby哈希表数组;仅保留包含特定键=>值对的第一个元素

来自分类Dev

array.each仅返回Ruby中的第一个值

来自分类Dev

熊猫str包含返回匹配项

来自分类Dev

HtmlAgilityPack仅返回第一个匹配项

来自分类Dev

preg_match仅返回第一个匹配项

来自分类Dev

c_str返回,但缺少第一个字符

来自分类Dev

为什么 str.FirstChar() 不返回第一个字符?

来自分类Dev

Ruby:如果匹配则返回字符串中的第一个字符,如果不匹配则返回nil?

来自分类Dev

PyQuery-attr match仅返回第一个匹配项,而不是所有匹配项

来自分类Dev

在Ruby中以优雅的方式查找可能匹配的哈希键中的第一个

来自分类Dev

用单斜杠替换双斜杠,Ruby中的第一个匹配除外

来自分类Dev

在Ruby中以优雅的方式查找可能匹配的哈希键中的第一个

来自分类Dev

在 Ruby 中打印匹配字符串行的第一个单词

来自分类Dev

Ruby on Rails:表单中的第一个参数不能包含nil或为空

来自分类Dev

Ruby拆分数组,然后根据模式返回第一个元素

来自分类Dev

仅将字符串的第一个字符替换为str_replace?

来自分类Dev

ruby:如果项的某些键相同,如何从数组中获取第一个哈希项?

来自分类Dev

Ruby简介:第一个应用程序

来自分类Dev

为什么ruby只返回正则表达式的最后一个匹配项?

来自分类Dev

Ruby Regex仅捕获最后一个匹配组的值

来自分类Dev

如何使行与组的第一个值(str)保持一致?

来自分类Dev

仅子查询第一个匹配项

来自分类Dev

仅删除sed的第一个匹配项

来自分类Dev

NSPredicate仅查找第一个匹配项

来自分类Dev

仅打印第一个匹配项

来自分类Dev

正则表达式仅返回第一个匹配项

来自分类Dev

Python re.findall仅返回第一个匹配项

来自分类Dev

如何仅使用.Net Regex.Replace替换第一个匹配项

来自分类Dev

C#RegEx-仅获得字符串中的第一个匹配项

Related 相关文章

  1. 1

    Ruby哈希表数组;仅保留包含特定键=>值对的第一个元素

  2. 2

    array.each仅返回Ruby中的第一个值

  3. 3

    熊猫str包含返回匹配项

  4. 4

    HtmlAgilityPack仅返回第一个匹配项

  5. 5

    preg_match仅返回第一个匹配项

  6. 6

    c_str返回,但缺少第一个字符

  7. 7

    为什么 str.FirstChar() 不返回第一个字符?

  8. 8

    Ruby:如果匹配则返回字符串中的第一个字符,如果不匹配则返回nil?

  9. 9

    PyQuery-attr match仅返回第一个匹配项,而不是所有匹配项

  10. 10

    在Ruby中以优雅的方式查找可能匹配的哈希键中的第一个

  11. 11

    用单斜杠替换双斜杠,Ruby中的第一个匹配除外

  12. 12

    在Ruby中以优雅的方式查找可能匹配的哈希键中的第一个

  13. 13

    在 Ruby 中打印匹配字符串行的第一个单词

  14. 14

    Ruby on Rails:表单中的第一个参数不能包含nil或为空

  15. 15

    Ruby拆分数组,然后根据模式返回第一个元素

  16. 16

    仅将字符串的第一个字符替换为str_replace?

  17. 17

    ruby:如果项的某些键相同,如何从数组中获取第一个哈希项?

  18. 18

    Ruby简介:第一个应用程序

  19. 19

    为什么ruby只返回正则表达式的最后一个匹配项?

  20. 20

    Ruby Regex仅捕获最后一个匹配组的值

  21. 21

    如何使行与组的第一个值(str)保持一致?

  22. 22

    仅子查询第一个匹配项

  23. 23

    仅删除sed的第一个匹配项

  24. 24

    NSPredicate仅查找第一个匹配项

  25. 25

    仅打印第一个匹配项

  26. 26

    正则表达式仅返回第一个匹配项

  27. 27

    Python re.findall仅返回第一个匹配项

  28. 28

    如何仅使用.Net Regex.Replace替换第一个匹配项

  29. 29

    C#RegEx-仅获得字符串中的第一个匹配项

热门标签

归档