【问题标题】:RegEx, How to get all matches and group? Ruby 1.9.3p125RegEx,如何获取所有匹配项和组?红宝石 1.9.3p125
【发布时间】:2012-06-05 00:01:00
【问题描述】:

假设我有以下字符串:

google-com, Awesome-net(Ooops), facebook-com / rocket-yet

我想提取所有以-com 结尾的单词,但要将它们分组。

目前,我已经尝试过:

^\w+[-]com

这很好,但只捕获了第一场比赛。如何获得所有其他人?也许使用括号的东西,但我不知道如何..

将所有匹配的字符串放入 MatchData 对象 (Ruby) 我可以像 Array 一样工作。

我正在使用 ruby​​ 1.9.3p125

1.9.3p125 :124 > original
 => "google-com, Awesome-net(Ooops), facebook-com / rocket-yet" 
1.9.3p125 :125 > results = original.match(/(\w+-com)/)
 => #<MatchData "google-com" 1:"google-com"> 

【问题讨论】:

  • 不要使用[-]。一个裸露的- 就可以了。

标签: ruby regex ruby-1.9.3


【解决方案1】:

只需使用 findall 选项即可:

\w+-com

我在http://rubular.com/测试过

【讨论】:

  • 它返回什么?你必须让它通过某个函数调用返回所有匹配的字符串——如果它只返回第一个,你可能使用了错误的调用。
【解决方案2】:

编辑:发现问题,您的正则表达式在开头有一个插入符号,表示只有字符串开头的 this 实例才会匹配。删除它应该允许您匹配字符串中的所有组:

(\w+[-]com)

【讨论】:

  • /g 在 Ruby 中不是有效的正则表达式选项。
  • 在 Rubular 中,您的正则表达式看起来像是在全局运行,您确定您不只是让 ruby​​ 获取初始实例吗?
  • 很奇怪,但在IRB 上测试它两次捕获相同的第一场比赛。有什么建议吗?
【解决方案3】:

似乎match 不是正确的方法。

使用 Ben Roux 和 Epic_orange 建议的正则表达式更改为 scan 使其工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    相关资源
    最近更新 更多