我正在使用以下代码从字符串中提取版本号。版本号是第一个仅由数字和点组成的匹配。例如在字符串中:“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”。
我是RegEx的新手,所以我很难搞清楚。
感谢您的帮助。
答案 0 :(得分:9)
if (preg_match('/\d+(?:\.\d+)+/', $version, $matches)) {
return $matches[0]; //returning the first match
}
允许.x
重复,它应该有效。
答案 1 :(得分:2)
试试这个:
'/\d+(\.\d+)+/'
与你的不同之处在于它允许.\d+
部分重复,从而允许多个点。
答案 2 :(得分:0)
要将软件版本号与一个/不带/多个点匹配,可以使用:
\d+(?:\.*\d*)*
(在此帖之前向作者致敬)