1

我在使用正则表达式替换元字符时遇到问题。我希望正则表达式替换元字符的短语是:

ley+sobre+propiedad+literaria+1847

我使用的代码如下:

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

但它似乎只替换了第一个元字符,结果是:

leysobre+propiedad+literaria+1847

我应该用什么?

4

3 回答 3

6
  1. \s是一个字符类,而不是字符串的有效转义。替换的第二部分被视为一个字符串。
  2. 要替换所有出现(“全局”),请使用/g替换上的开关。
  3. 单字符音译也可以使用tr///运算符。

假设您想用+空格替换:

tr/+/ /;

或者

s/\+/ /g;

如果要解码 URL:

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

有关详细信息,请参阅URL::Encode 的文档

于 2013-08-14T10:29:58.370 回答
3

您的问题与元字符无关。替换s///仅替换模式的第一次出现,除非被选项告知替换所有模式/g

顺便说一句,在替换部分中\s被解释为普通。s如果你想\s,你必须指定\\s反斜杠反斜杠(如双引号)。因此输出实际上是

leyssobre+propiedad+literaria+1847

注意双s

于 2013-08-14T10:27:54.817 回答
1

使用s/\+/ /g全局替换。

于 2013-08-14T10:25:27.443 回答