Comment on Advanced Regular Expression Tips and TechniquesComments−draegtun12yThese days I try and use Named Capture Buffers where feasible to make my regex code much easier to understand & update.For eg. Here is one way I would do the first example shown (using Perl this time): use 5.016; use warnings; use re '/x'; # ignore all whitespace in regex patterns my $delimiter = qr/ (?<delimiter> [\-\.\s]) /; my $prefix = qr/ (?<prefix> 1) /; my $area_code = qr/ (?<area_code> \d{3}) /; my $first3digits = qr/ (?<first3digits> \d{3}) /; my $last4digits = qr/ (?<last4digits> \d{4}) /; my $prefix_rule = qr/ ($prefix $delimiter) /; my $area_code_rule = qr/ ($area_code | \( $area_code \)) /; my $pattern = qr/ ^ ($area_code_rule | ($prefix_rule $area_code_rule)) $delimiter $first3digits $delimiter $last4digits \Z /; my @numbers = ( "123 555 6789", "1-(123)-555-6788", "(123-555-6787", "(123).555.6786", "123 55 6785", ); for my $number (@numbers) { if ($number =~ $pattern) { print "$number is valid : "; say join "-", $+{prefix} || 'none', $+{area_code}, $+{first3digits}, $+{last4digits}; } } Output: 123 555 6789 is valid : none-123-555-6789 1-(123)-555-6788 is valid : 1-123-555-6788 (123).555.6786 is valid : none-123-555-6786
Comments
These days I try and use Named Capture Buffers where feasible to make my regex code much easier to understand & update.
For eg. Here is one way I would do the first example shown (using Perl this time):
Output: