使用正则表达式替换元字符时遇到问题。 我希望正则表达式替换元字符的短语是:
ley+sobre+propiedad+literaria+1847
我使用的代码如下:
$file =~ s/\+/\s/; # --> Replace the +
但它似乎只取代了第一个元字符,结果是:
leysobre+propiedad+literaria+1847
我使用什么?
答案 0 :(得分:6)
\s
是一个字符类,而不是字符串的有效转义符。替换的第二部分被视为字符串。/g
开关。tr///
运算符。假设您想要用空格替换+
:
tr/+/ /;
或
s/\+/ /g;
如果您想解码网址:
use URL::Encode 'url_decode';
my $real_filename = url_decode $file;
有关详细信息,请参阅documentation for URL::Encode。
答案 1 :(得分:3)
您的问题未与元字符相关联。替换s///
仅替换模式的第一次出现,除非被告知用/g
选项替换所有模式。
BTW,\s
在替换部分被解释为普通s
。如果你想要\s
,你必须指定\\s
来反斜杠反斜杠(如双引号)。因此,输出实际上是
leyssobre+propiedad+literaria+1847
请注意双s
。
答案 2 :(得分:1)
使用s/\+/ /g
全局替换。