Perl - 用正则表达式替换metacharcters

时间:2013-08-14 10:23:43

标签: regex perl file metacharacters

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

ley+sobre+propiedad+literaria+1847

我使用的代码如下:

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

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

leysobre+propiedad+literaria+1847

我使用什么?

3 个答案:

答案 0 :(得分:6)

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

    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全局替换。