$re = '/(?=\d{2,3}9\d+)(?<!\d)(\d{11,12})(?!\d)|(?<!\d)(\d{2}\s\d{5}\s\d{4})(?!\d)|(?<!\d)(0\d{2}\s\d{5}\s\d{4})(?!\d)|(?<!\d)(\d{2}\s9\s\d{4}\s\d{4})(?!\d)|(?<!\d)(0\d{2}\s9\s\d{4}\s\d{4})(?!\d)|(?<!\d)(\d{9})(?!\d)|(?<!\d)(\d\s\d{8})(?!\d)|(?<!\d)(\(\d{2}\)\d{9})(?!\d)|(?<!\d)(\(0\d{2}\)\d{9})(?!\d)|(?<!\d)(\(\d{2}\)\d{1}\s\d{4}\s\d{4})(?!\d)|(?<!\d)(\(0\d{2}\)\d{1}\s\d{4}\s\d{4})(?!\d)|(?<!\d)(\(\d{2}\)\s\d{1}\s\d{4}\s\d{4})(?!\d)|(?<!\d)(\(0\d{2}\)\s\d{1}\s\d{4}\s\d{4})(?!\d)/m';
$str = '---> DEVE ENCONTRAR:
11991234567 // /¯¯¯¯¯
011991234567 // | (?=\\d{2,3}9\\d+)(?<!\\d)(\\d{11,12})(?!\\d)
119111111111 // \\_____
11 99123 4567 // (?<!\\d)(\\d{2}\\s\\d{5}\\s\\d{4})(?!\\d)
011 99123 4567 // (?<!\\d)(0\\d{2}\\s\\d{5}\\s\\d{4})(?!\\d)
11 9 9123 4567 // (?<!\\d)(\\d{2}\\s9\\s\\d{4}\\s\\d{4})(?!\\d)
011 9 9123 4567 // (?<!\\d)(0\\d{2}\\s9\\s\\d{4}\\s\\d{4})(?!\\d)
---> DEVE ENCONTRAR (EXEMPLOS DA PERGUNTA + ALGUMAS EXTENSÕES):
993345987 // (?<!\\d)(\\d{9})(?!\\d)
9 93345987 // (?<!\\d)(\\d\\s\\d{8})(?!\\d)
(21)932324343 // (?<!\\d)(\\(\\d{2}\\)\\d{9})(?!\\d) ## OU: (?<!\\d)(\\d{9})(?!\\d)
(021)932324343 // (?<!\\d)(\\(0\\d{2}\\)\\d{9})(?!\\d) ## OU: (?<!\\d)(\\d{9})(?!\\d)
(21)9 3232 4343 // (?<!\\d)(\\(\\d{2}\\)\\d{1}\\s\\d{4}\\s\\d{4})(?!\\d)
(021)9 3232 4343 // (?<!\\d)(\\(0\\d{2}\\)\\d{1}\\s\\d{4}\\s\\d{4})(?!\\d)
(21) 9 3232 4343 // (?<!\\d)(\\(\\d{2}\\)\\s\\d{1}\\s\\d{4}\\s\\d{4})(?!\\d)
(021) 9 3232 4343 // (?<!\\d)(\\(0\\d{2}\\)\\s\\d{1}\\s\\d{4}\\s\\d{4})(?!\\d)
NÃO DEVE ENCONTRAR:
11 99123 45671
111 99123 4567
011 99123 45678
811 99123 45678
a9999999999999999999989999123
118111111111
123456789123456789
';
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