$re = '/^(\d|\+|\(|)
(\d+|xx)
(xx|.)?
(\d+|.)?
(\))?
(\d)?
(\d|.)?
(\))?
.+/mx';
$str = '9876-5432
98765-4321
11 9876-5432
011 9876-5432
0xx11 9876-5432
0xx 11 9876-5432
+55 11 9876-5432
+55 11 98765-4321
+551198765432
+5511987654321
(11)9876-5432
(11) 9876-5432
(0xx11) 9876-5432
+55 (11) 98765-4321';
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