Какой regex я могу использовать для соответствия какому-либо допустимому IP-адресу, представленному в точечной десятичной записи?

Какой regex я могу использовать для соответствия какому-либо допустимому IP-адресу, представленному в точечной десятичной записи?

9
задан brian d foy 16 March 2010 в 13:52
поделиться

6 ответов

CPAN - ваш друг: Regex :: Common или Net :: IP :: Match :: Regexp .

14
ответ дан 4 December 2019 в 06:30
поделиться
if($ip=~/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/ &&(($1<=255  && $2<=255 && $3<=255  &&$4<=255 )))
     {
         print "valid\n";
     }
     else
     {
         print "Invalid\n";
     }
15
ответ дан 4 December 2019 в 06:30
поделиться

Если вы можете оставить модуль perl позади - сделайте это.

что насчет:

if( $ip=~ m/^(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)/ && 
          ( $1 <= 255 && $2 <= 255 && $3 <= 255 && $4 <= 255 )
) {    
    print "valid IP.";
}
2
ответ дан 4 December 2019 в 06:30
поделиться

Для IPv4 в формате ABCD (десятичный), как однострочный:

(?: (?: [01]? \ D { 1,2} | 2 [0-4] \ d | 25 [0-5]) \.) {3} (?: [01]? \ D {1,2} | 2 [0-4] \ d | 25 [0-5])

Если за адресом в строке ничего не следует, его можно сократить до:

(?: (?: [01]? \ D? \ D? | 2 [0- 4] \ d | 25 [0-5]) (?: \. | $)) {4}

Удачи.

1
ответ дан 4 December 2019 в 06:30
поделиться
(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])

На самом деле совпадает с некоторыми недопустимыми IP-адресами, например:

192.168.00.001

Чуть более изысканное решение:

(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$
0
ответ дан 4 December 2019 в 06:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: