Какой regex я могу использовать для соответствия какому-либо допустимому IP-адресу, представленному в точечной десятичной записи?
CPAN - ваш друг: Regex :: Common или Net :: IP :: Match :: Regexp .
Как мне написать регулярное выражение, которое соответствует адресу IPv4 с точками?
Короче говоря: не делайте этого ^^.
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";
}
Если вы можете оставить модуль 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.";
}
Для 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}
Удачи.
(?:(?:[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)$