use strict;
my $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
';
my $regex = qr/(?=\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)/mp;
if ( $str =~ /$regex/g ) {
print "Whole match is ${^MATCH} and its start/end positions can be obtained via \$-[0] and \$+[0]\n";
# print "Capture Group 1 is $1 and its start/end positions can be obtained via \$-[1] and \$+[1]\n";
# print "Capture Group 2 is $2 ... and so on\n";
}
# ${^POSTMATCH} and ${^PREMATCH} are also available with the use of '/p'
# Named capture groups can be called via $+{name}
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 Perl, please visit: http://perldoc.perl.org/perlre.html