我无法理解为什么这两个表达式不同:
^(\d+)(?:\.(\d+))?(?:\.(\d+))?$
applied to 1.0.3
group 1 =>1
group 2 =>0
group 3 =>3
这是预料之中的。但如果我试图将它推广到\d\.
的任何系列,那么它就不再起作用了:
^(\d+)(?:\.(\d+))+$
applied to 1.0.3
group 1 =>1
group 2 =>3
除了第一个和最后一个条目消失之外,对我来说一切都很奇怪:
^(\d+)(?:\.(\d+))+$
applied to 1.2.3.4.5.6.7.8.9
group 1 =>1
group 2 =>9
不完全是我所期待的
答案 0 :(得分:0)
尝试使用以下正则表达式,它捕获至少有一位数的所有数字并将它们放在分开的组中:
(?<=^|\.)(\d+)(?=\.|$)
它很简单。让我们描述一下正则表达式的各个部分:
(?<=^|\.)
跟在点\d+
字符后面,那么.
是正向后检查(注意必须转义为\.
,否则表示任何字符)或第^
行的开头。\d+
是要捕获的号码(?=\.|$)
是一个积极的先行,检查数字\d+
后面是点.
还是行$
的结尾。 在Regex101处尝试一下,更详细的解释。