0

我正在尝试匹配这个字符串:

NFPA 101 19.7.2.2

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

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

这似乎与字符串匹配,但捕获的组不是我想要的。我预计:

  1. NFPA
  2. 101
  3. 19
  4. 7
  5. 2
  6. 2

我得到的是:

  1. NFPA
  2. 101
  3. 2

请参阅此 rubular 示例: http ://rubular.com/r/43VY0yyNa7

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

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

4

1 回答 1

1

问题是您使用的是非捕获组符号:,它无法将字符串选择为单独的捕获组。要克服这个问题,您需要使用Positive / Negative Lookahead。因此,以下正则表达式应该适用于这种情况:

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

演示

于 2017-02-21T20:30:15.177 回答