nysus has asked for the wisdom of the Perl Monks concerning the following question:
In the following piece of markdown text, I want to replace the spaces with a hyphen and also make the link absolute with a slash in front. So I want to go from:
blah blah [click me](click me) more stuff blah [link here](link here) blah blah ...
to:
blah blah [click me](/click-me) more stuff blah [link here](/link-here) blah blah ...
So this is as far as I got and I'm stymied:
#!/usr/bin/env perl use strict; use warnings; my $text = "blah blah [click me](click me) more stuff\nblah [link here +](link here) blah blah"; $text =~ s/(\[[^]]+]\()/$1\//g; # make links absolute $text =~ /(\[[^]]+]\(\/)([^\)]+)/; my $part1 = $1; my $part2 = $2; my $orig_part2 = $part2; $part2 =~ s/ /-/g; $text =~ s/\Q$part1$orig_part2\E/$part1$part2/g;
The obvious problem with this code is that only the first link gets the space replaced:
blah blah [click me](/click-me) more stuff blah [link here](/link here) blah blah
I'm drawing a blank on how I might loop through all matches to links and modify those matches. Or maybe there is an entirely better way of pulling this off. Thanks!
UPDATE:
OK, I noodled around with this some more. On a lark, I tried a "global" match (which I didn't know existed outside substitution), and came up with this:
my $text = "blah blah [click me](click me) more stuff\nblah [link here +](link here) blah blah"; $text =~ s/(\[[^]]+]\()/$1\//g; # make links absolute my @matches = $text =~ /(\[[^]]+]\(\/)([^\)]+)/g; while (@matches) { my $part1 = shift @matches; my $part2 = shift @matches; my $orig_part2 = $part2; $part2 =~ s/ /-/g; $text =~ s/\Q$part1$orig_part2\E/$part1$part2/g; }
Though it seems to work, I have a hunch this isn't ideal.
$PM = "Perl Monk's";
$MCF = "Most Clueless Friar Abbot Bishop Pontiff Deacon Curate Priest Vicar";
$nysus = $PM . ' ' . $MCF;
Click here if you love Perl Monks
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Modifying muliple matched strings in text (updated)
by haukex (Archbishop) on Jul 12, 2020 at 13:36 UTC | |
by nysus (Parson) on Jul 14, 2020 at 13:32 UTC | |
Re: Modifying muliple matched strings in text
by LanX (Saint) on Jul 12, 2020 at 13:00 UTC | |
by nysus (Parson) on Jul 14, 2020 at 13:24 UTC | |
Re: Modifying muliple matched strings in text
by tybalt89 (Monsignor) on Jul 12, 2020 at 15:01 UTC |