in reply to Regex to add space after punctuation sign

This seems to pass my limited testing...

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