正则表达式从字符串中提取数字和点
我使用以下代码从字符串中提取版本号。版本号是仅由数字和点组成的第一个匹配。例如,在字符串“GT-I9000M-user 2.25.31 FROYO UGKC1 release-keys”中,匹配项将为:“2.25.31” 字符串中的另一个示例:“1.24.661.1hbootpreupdate:13DelCache: 1”,匹配结果为:“1.24.661.1”。
我当前的代码是:
if (preg_match('/[\d]+[\.][\d]+/', $version, $matches)) {
return $matches[0]; //returning the first match
}
该代码仅适合某些情况,但不适合所有情况。例如,在第一个示例中,它将仅返回:“2.25”而不是“2.25.31”。在第二个示例中,它将返回“1.24”而不是“1.24.661.1”。
我是正则表达式的新手,所以我很难弄清楚它。
感谢您的帮助。
I'm using the following code to extract the version number from a string. The version number is the first match made only by digits and dots. For example in the string: "GT-I9000M-user 2.25.31 FROYO UGKC1 release-keys" the match would be: "2.25.31"
Another example in string: "1.24.661.1hbootpreupdate:13DelCache: 1" the match would be: "1.24.661.1".
My current code is:
if (preg_match('/[\d]+[\.][\d]+/', $version, $matches)) {
return $matches[0]; //returning the first match
}
This code fits only some of the cases but not all of them. For example in the first example it will only return: "2.25" instead of "2.25.31". In the second example it will return "1.24" instead of "1.24.661.1".
I'm new to RegEx so I'm having a hard time figuring it out.
Thanks for your help.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
允许
.x
重复,它应该可以工作。Allow the
.x
to repeat and it should work.试试这个:
与您的不同之处在于它允许
.\d+
部分重复,从而允许多个点。Try this one:
The difference with yours is that it allows the
.\d+
part to repeat, thus allowing multiple dots.要将软件版本号与一个/不带/多个点相匹配,可以使用:(
在发表这篇文章之前向作者致敬)
To match software version numbers with one/without/multiple dots one could use:
(kudos to authors before this post)