# Grouping Matching in Perl

PERLServer Side ProgrammingProgramming Scripts

From a regular-expression point of view in Perl, there is no difference between the following two expressions except that the former is slightly clearer.

$string =~ /(\S+)\s+(\S+)/; and$string =~ /\S+\s+\S+/;

However, the benefit of grouping is that it allows us to extract a sequence from a regular expression. Groupings are returned as a list in the order in which they appear in the original. For example, in the following fragment we have pulled out the hours, minutes, and seconds from a string.

my ($hours,$minutes, $seconds) = ($time =~ m/(\d+):(\d+):(\d+)/);

As well as this direct method, matched groups are also available within the special $x variables, where x is the number of the group within the regular expression. We could therefore rewrite the preceding example as follows − ## Example Live Demo #!/usr/bin/perl$time = "12:05:30";
$time =~ m/(\d+):(\d+):(\d+)/; my ($hours, $minutes,$seconds) = ($1,$2, $3); print "Hours :$hours, Minutes: $minutes, Second:$seconds\n";

When above program is executed, it produces the following result −

Hours : 12, Minutes: 05, Second: 30

When groups are used in substitution expressions, the $x syntax can be used in the replacement text. Thus, we could reformat a date string using this − ## Example Live Demo #!/usr/bin/perl$date = '03/26/1999';
$date =~ s#(\d+)/(\d+)/(\d+)#$3/$1/$2#;
print "\$date\n";

When above program is executed, it produces the following result −

1999/03/26
Published on 29-Nov-2019 16:37:15