Rails 正则表达式匹配组覆盖自身
Rails Regex Match Group Overwriting itself
我正在尝试匹配这个字符串:
NFPA 101 19.7.2.2
并且正在使用这个正则表达式:
(NFPA) (\w+)(?: ?(?:([^.]+)\.?)+)?
这似乎与字符串匹配,但捕获的组不是我要找的。我预计:
- NFPA
- 101
- 19
- 7
- 2
- 2
我得到的是这样的:
- NFPA
- 101
- 2
看这个rubular例子:
http://rubular.com/r/43VY0yyNa7
就好像最后一个循环捕获组正在被最后的匹配覆盖。有没有办法让所有这些都作为我需要的捕获组返回?
添加了另一个正则表达式,它给我带来了上述类似问题:
(NFPA) (.+) (.+?.)+(.+)
问题是您正在使用 non-capturing group symbol :
which isn't gonna work to select the string as separate capture group. To overcome the issue you need to use Positive / Negative Lookahead。因此,以下 regex 应该适用于这种情况:
(\w+|\d+[-]\d+)(?=\s?)(?![-])
见demo
我正在尝试匹配这个字符串:
NFPA 101 19.7.2.2
并且正在使用这个正则表达式:
(NFPA) (\w+)(?: ?(?:([^.]+)\.?)+)?
这似乎与字符串匹配,但捕获的组不是我要找的。我预计:
- NFPA
- 101
- 19
- 7
- 2
- 2
我得到的是这样的:
- NFPA
- 101
- 2
看这个rubular例子: http://rubular.com/r/43VY0yyNa7
就好像最后一个循环捕获组正在被最后的匹配覆盖。有没有办法让所有这些都作为我需要的捕获组返回?
添加了另一个正则表达式,它给我带来了上述类似问题: (NFPA) (.+) (.+?.)+(.+)
问题是您正在使用 non-capturing group symbol :
which isn't gonna work to select the string as separate capture group. To overcome the issue you need to use Positive / Negative Lookahead。因此,以下 regex 应该适用于这种情况:
(\w+|\d+[-]\d+)(?=\s?)(?![-])
见demo