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