如何在perl中替换匹配的模式

时间:2016-04-04 22:19:04

标签: regex perl

我试图编写一个接受输入模式的Perl程序,并打印字符串,其中匹配的部分用括号括起来。例如,如果我输入正则表达式" .p"字符串是"开发",它应该打印"开发(op)ing"

这是我的计划:

if (/($pattern)/) {
    $_ =~ s/$1/($1)/;
    print;
} else {
    print "no match\n";
}

当我运行它时,我收到错误消息:

  

在连接(。)中使用未初始化的值$ 1或在q1.pl中使用字符串   第12行,<>第1行。

字符串" devel()ing"被退回了。 我做了一些研究,似乎$ 1未初始化,因为字符串不匹配,但在我的情况下,$ 1应该始终初始化,因为我检查" if ... else ..."

2 个答案:

答案 0 :(得分:1)

匹配后,$1包含字符串op

替换与op匹配,但搜索部分没有括号,因此$1被清除,并且没有任何内容可以替代op

添加括号以再次创建捕获组:

s/($1)/($1)/;

答案 1 :(得分:0)

替换中的

downloadAllImages()包含匹配中的第一个捕获组,但正则表达式中没有捕获组。您可以使用$1来获取正则表达式匹配的所有内容。

$&