- var_dump: documentation ( source)
- preg_match: documentation ( source)
<?php
$pattern='(?:^(?:(?<a>(?:(?:[0-9]|[1-9][0-9]|1[0-7][0-9]))|(?:(?:[0-9]|[1-9][0-9]|1[0-7][0-9])\.\d)|180)!(?<b>(?:(?:[0-9]|[1-9][0-9]|[1-3][0-5][0-9]))|(?:(?:[0-9]|[1-9][0-9]|[1-3][0-5][0-9])\.\d)|360)!(?<c>-?(?:(?:(?:[0-8]|[1-8][0-9]))|(?:(?:[0-9]|[1-8][0-9])\.\d)|90)))$)';
$subject='123!360!-12.3';
preg_match('/' . $pattern . '/', $subject, $array);
if(!empty($array)) var_dump($array['a'], $array['b'], $array['c']);