Regex для извлечения цифр и точек из строки - PullRequest
3 голосов
/ 29 августа 2011

Я использую следующий код для извлечения номера версии из строки. Номер версии - это первое совпадение, состоящее только из цифр и точек. Например, в строке: «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, поэтому мне сложно разобраться.

Спасибо за вашу помощь.

Ответы [ 3 ]

9 голосов
/ 29 августа 2011
if (preg_match('/\d+(?:\.\d+)+/', $version, $matches)) { 
    return $matches[0]; //returning the first match 
}

Позвольте .x повторить, и оно должно работать.

2 голосов
/ 29 августа 2011

Попробуйте это:

'/\d+(\.\d+)+/'

Разница с вами в том, что она позволяет повторять часть .\d+, что позволяет использовать несколько точек.

0 голосов
/ 22 июня 2012

Чтобы сопоставить номера версий программного обеспечения с одной / без / несколькими точками, можно использовать:

\d+(?:\.*\d*)*

(слава авторам до этого поста)

...