Marc Ortiz
Marc Ortiz

Reputation: 2412

Perl -- replacing metacharcters with regular expressions

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?

Upvotes: 1

Views: 89

Answers (3)

collapsar
collapsar

Reputation: 17238

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

Upvotes: 1

amon
amon

Reputation: 57640

  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.

Upvotes: 6

choroba
choroba

Reputation: 242103

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.

Upvotes: 3

Related Questions