Perl -- replacing metacharcters with regular expressions

79 views Asked by At

I'm having problems while replacing metacharacters using regular expressions. The phrase I want the regular expressions replace the metacharacter is:

ley+sobre+propiedad+literaria+1847

And the code I use is that below:

$file =~ s/\+/\s/; # --> Replace the +

But it seems to only replace the first metacharacter and the result is:

leysobre+propiedad+literaria+1847

What shoud I use?

3

There are 3 answers

0
amon On BEST ANSWER
  1. The \s is a character class and not a valid escape for strings. The second part of a substitution is taken as a string.
  2. To replace all occurrences (“globally”), use the /g switch on the replacement.
  3. Single-character transliterations can also use the tr/// operator.

Assuming you want to replace + by a space:

tr/+/ /;

or

s/\+/ /g;

If you want to decode URLs:

use URL::Encode 'url_decode';
my $real_filename = url_decode $file;

See the documentation for URL::Encode for further information.

0
collapsar On

use the s/\+/ /g to replace globally.

0
choroba On

Your problem is not connected to metacharacters. The substitution s/// replaces only the first occurrence of the pattern unless told to replace all of them by the /g option.

BTW, \s is interpreted as plain s in the replacement part. If you want \s, you have to specify \\s to backslash the backslash (as in double quotes). Thus the output is in fact

leyssobre+propiedad+literaria+1847

Note the double s.