in reply to Re: Reg exp questions
in thread Reg exp questions

if $str =~ s/[\h]/_/g; replaces all white spaces by _ and if there are more than 1 adjacent white space, how to replace all of adjacent white spaces by one _ instead of _ times number of adjacent white spaces?

Replies are listed 'Best First'.
Re^3: Reg exp questions
by davido (Cardinal) on Nov 09, 2014 at 17:32 UTC

    First thing: You don't need [...] if there is only one element in your character class. \h alone is already a metasymbol that specifies a character class, so if all you want is horizontal whitespace, you could say:

    s/\h/_/g;

    You asked how to permit it to accept more than one adjacent whitespace, and how to replace any number of adjacent whitespaces with a single underscore:

    s/\h+/_/g

    If by \h you really just mean 0x20 (chr 32), you could use transliteration with "squash" instead (see perlop):

    tr/ /_/s;

    This will be a little more efficient than substitution, but tr/// is far less flexible, as it doesn't have regex semantics; there is no pattern, only a list of characters to be transliterated.


    Dave

Re^3: Reg exp questions
by poj (Abbot) on Nov 09, 2014 at 12:55 UTC