in reply to Regex to add space after punctuation sign
use strict; use warnings; my $string = '1,2,a,b,3'; $string =~ s/( (?:(?<!\d)(?:,|\.)(?!\s*\d)) | (?:(?<=\d)(?:,|\.)(?=\s*)(?!\d)) | (?:(?<!\d)(?:,|\.)(?=\s*\d)) ) /$1 /gx; print $string, "\n";
It's really ugly, but triggers a substitution all of the following cases:
So I think it meets your spec. If this is homework I would seriously recommend immersing yourself in the POD's so that you'll be able to explain to your professor how it is you came up with such a wild RE. For that matter, it's time that I re-read the POD's, as I'm not convinced that it really needs to be so explicit to work properly.
See perlre to learn about zero-width lookahead and lookbehind (positive and negative). Also read perlretut and perlop under the "Regexp quote like characters" section, for starters.
Dave
|
|---|