Rails Regex Match Group覆盖自己

时间:2017-02-21 20:16:18

标签: ruby-on-rails regex rubular

我正在尝试匹配此字符串:

NFPA 101 19.7.2.2

我正在使用这个正则表达式:

(NFPA) (\w+)(?: ?(?:([^.]+)\.?)+)?

这似乎与字符串匹配,但捕获的组不是我正在寻找的。我期待:

  1. NFPA
  2. 101
  3. 19
  4. 7
  5. 2
  6. 2
  7. 我得到的是:

    1. NFPA
    2. 101
    3. 2
    4. 请参阅此rubular示例: http://rubular.com/r/43VY0yyNa7

      好像最后一次重复捕获组被最后一场比赛覆盖了。有没有办法让所有这些作为我需要的捕获组回来?

      添加了另一个正则表达式,它给出了我上面描述的类似问题: (NFPA)(。+)(。+ ?.)+(。+)

1 个答案:

答案 0 :(得分:1)

问题是您正在使用non-capturing group符号:,这不会将字符串选为单独的捕获组。要解决此问题,您需要使用Positive / Negative Lookahead。因此,以下 regex 应该适用于这种情况:

(\w+|\d+[-]\d+)(?=\s?)(?![-])

请参阅demo