Anonymous user
Range extraction: Difference between revisions
Added Perl
Underscore (talk | contribs) (Added Haskell.) |
(Added Perl) |
||
Line 573:
Sample output:
<lang oz>0-2,4,6-8,11,12,14-25,27-33,35-39</lang>
=={{header|Perl}}==
Using only regexes. Also handles negative integer ranges.
<lang Perl>sub rangext {
(my $str = shift) =~ s/,\s+/ /g;
1 while $str =~ s{([+-]?\d+) ([+-]?\d+)}
{$1.(abs($2 - $1) == 1 ? '~' : ',').$2}eg;
$str =~ s/(\d+)~([+-]?\d+~)+([+-]?\d+)/$1-$3/g;
$str =~ s/~/,/g;
return $str;
}
# Test and display
$test = '0, 1, 2, 4, 6, 7, 8, 11, 12, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
25, 27, 28, 29, 30, 31, 32, 33, 35, 36,
37, 38, 39';
print rangext($test), "\n";</lang>
Output:
<pre>0-2,4,6-8,11,12,14-25,27-33,35-39</pre>
=={{header|PicoLisp}}==
|