use strict;
my $str = '123456789
1234567890123456
1234567890123
0091234567890
+9 123-4567890-x321
+9-123-456-7890
+9 123 4 5 6-7890x1234
009-(123)-456-7890 ext4321
0091234567890x1234
+9-123-456-7890x12345
+9-123-456-7890 ext 1234
0027-123-456-7890
+27-123-456-7890
+9(123)4567890
911
(0)123456789
+34123456789
+34 (0)123456789
+340123456789
+34 123 456 789
+34 1 23 45 67 89
001230123456789
ext1234
++34123456789
00-0-----000
01 555012345
001-555012345
+012345678
112
12(34567890
123)456789012345
';
my $regex = qr/^(?=(?:\+|0{2})?(?:(?:[\(\-\)\t\f ]*\d){7,10})?(?:[\t\f ]?\d{2,3})(?:[\-\s]?[ext]{1,3}[\-\t\f ]?\d{1,4})?$)((?:\+|0{2})\d{0,3})?(?:[\-\t\f ]?)(\(0?\d{1,3}\)|\d{0,3})(?:[\-\t\f ]{0,2}\d){3,}(?:[\-\s]?(?:x|ext)[\-\t\f ]?(\d{1,4}))?$/mip;
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