$re = '/(?<![\.\*\d])(?:(?P<a>2(?:5[0-5]|[0-4]\d)|1\d{2})|(?:0)?(?P<a>[1-9]\d)|(?:00)?(?P<a>\d)|(?P<a>\*))\.(?:(?P<b>2(?:5[0-5]|[0-4]\d)|1\d{2})|(?:0)?(?P<b>[1-9]\d)|(?:00)?(?P<b>\d)|(?P<b>\*))\.(?:(?P<c>2(?:5[0-5]|[0-4]\d)|1\d{2})|(?:0)?(?P<c>[1-9]\d)|(?:00)?(?P<c>\d)|(?P<c>\*))\.(?:(?P<d>2(?:5[0-5]|[0-4]\d)|1\d{2})|(?:0)?(?P<d>[1-9]\d)|(?:00)?(?P<d>\d)|(?P<d>\*))(?![\.\*\d])/J';
$str = '*127.0.0.1 -> 127.0.0.1
192.168.0.1. -> 192.168.0.1
255.255.255.256 -> 255.255.255.255
192.168.**.* -> 192.168.*.*
255..1.15 -> 255.0.1.15
192.168.001.002 = 192.168.1.2
008.008.004.004 = 8.8.4.4';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php