S'assurer de la bonne structure d'une adresse ip avec une expression régulière n'est pas si évident qu'il peut paraître. Je me suis longtemps contenté de cette simple expression:
<?php
$ip = '100.50.40.30';
if( preg_match("#([0-9]{1,3}\.){3}[0-9]{1,3}#", $ip) )
echo "c'est une adresse IP ... ou pas! ";
Mais en y regardant de plus prêt on remarque que cette expression se contente de vérifier que la chaîne de caractère soit constituée de 4 nombres de 0 à 999 séparés par des points or une adresse IP sera au maximum et dans l'absolu 255.255.255.255.
On préférera donc celle-ci:
if( preg_match("#^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$#", $ip) )
echo "Ça c'est une vraie adresse IP!";
Mais bon, en PHP on peut aussi utiliser un filtre tel que FILTER_VALIDATE_IP.
if( filter_var($ip, FILTER_VALIDATE_IP) )
echo "Encore plus simple";