Space character in regex is not recognised

15,917

Solution 1

Try s/::/ /g instead of s/::/\s/g.

The \s is actually a character class representing all whitespace characters, so it only makes sense to have it in the regular expression (the first part) rather than in the replacement string.

Solution 2

Replace the \s with a real space.

The \s is shorthand for a whitespace matching pattern. It isn't used when specifying the replacement string.

Solution 3

Use s/::/ /g. \s only denotes whitespace on the matching side, on the replacement side it becomes s.

Solution 4

Replace string should be a literal space, i.e.:

$string =~ s/::/ /g;
Share:
15,917
kurotsuki
Author by

kurotsuki

Hi :)

Updated on June 24, 2022

Comments

  • kurotsuki
    kurotsuki almost 2 years

    I'm writing a simple program - please see below for my code with comments. Does anyone know why the space character is not recognised in line 10? When I run the code, it finds the :: but does not replace it with a space.

    1  #!/usr/bin/perl
    2
    3  # This program replaces :: with a space
    4  # but ignores a single :
    5
    6  $string = 'this::is::a:string';
    7
    8  print "Current: $string\n";
    9 
    10 $string =~ s/::/\s/g;
    11 print "New: $string\n";