in reply to Tips on how to perform this substitution?
The trick with the alternation is that your regex matches -s delimited by B's, thus slurping them up. The next regex search starts off after the last B, and needs to skip the following -s to find the next B.
use 5.010; use strict; use warnings; $_ = '------BBBBB----------------------------------------------------- +-------------------------------------------------------BBBBBB----BBBB +BBBB-----------------BBBBBB------------------------------------------ +--------------BBBBBBB---------------BBBBB-----BBBBBBBBB-------------- +----------------------BBBBBBBBB------BBBBBBBBB----------------------- +-----BBBBBBBBB--------------------------------------BBBBBBBB-------BB +BBBB---------------------BBBBBBB--------------------------BBBBBBBB--- +-'; my $expected = 'iiiiiiMMMMMooooooooooooooooooooooooooooooooooooooooooo +oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooMMMM +MMiiiiMMMMMMMMoooooooooooooooooMMMMMMiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii +iiiiiiiiiiiiiiiiiiiiiiiiMMMMMMMoooooooooooooooMMMMMiiiiiMMMMMMMMMoooo +ooooooooooooooooooooooooooooooooMMMMMMMMMiiiiiiMMMMMMMMMooooooooooooo +oooooooooooooooMMMMMMMMMiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiMMMMMMM +MoooooooMMMMMMiiiiiiiiiiiiiiiiiiiiiMMMMMMMooooooooooooooooooooooooooM +MMMMMMMiiii'; s/(^|B+)(-+)($|B+)/ $1 . ("i" x length($2)) . $3/eg; s/-/o/g; s/B/M/g; say $expected; say $_; say $expected eq $_ ? 'yes' : 'no';
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Tips on how to perform this substitution?
by tobyink (Canon) on Jan 22, 2014 at 14:16 UTC | |
by Tux (Canon) on Jan 22, 2014 at 14:47 UTC | |
|
Re^2: Tips on how to perform this substitution?
by Anonymous Monk on Jan 22, 2014 at 13:41 UTC |