well since my editor has a (mostly functioning) cperl-beautify-regexp
use v5.12; use warnings; use Test::More; my $str = '43:1:1; 43:1:2; 43:1:3; 43:1:4; 43:1:5; 43:1:6; 27:3:7; 27: +3:8; 27:3:9; 65:1:4; 65:1:18'; my $exp = '43:1:1-6; 27:3:7-9; 65:1:4; 65:1:18'; my $got = $str; $got =~ s/ ( \d+:\d+: ) # $1 ( \d+ # (updated +) ) # $2 = first $^N ; (?: # group w/o match \s \1 ( (??{ $^N+ 1 }) # include last_match + 1 ) # $3 = next $^N ; )+ # repeat /$1$2-$3;/xg; is($got, $exp, "fits"); done_testing;
Worth noting that the OP was wrong with his expectation, it's 43:1:1-6; not 43:1:1-5;
Cheers Rolf
(addicted to the Perl Programming Language :)
Wikisyntax for the Monastery
PS: still not perfect, because the input isn't terminated with a semicolon, but I'm tired now. :)
In reply to Re^3: Regexp substitution on variable-length ranges with embedded code? ( $^N )
by LanX
in thread Regexp substitution on variable-length ranges with embedded code?
by Polyglot
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |