문제

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?

도움이 되었습니까?

해결책

  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.

다른 팁

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.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top