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

Regex 如何在perl中替换匹配的模式,regex,perl,Regex,Perl,我正在尝试编写一个Perl程序,该程序接受输入模式,并使用括号中包含的匹配部分打印字符串。例如,如果我输入regex“.p”,字符串是“develing”,它应该打印“devel(op)ing” 这是我的节目: if (/($pattern)/) { $_ =~ s/$1/($1)/; print; } else { print "no match\n"; } 当我运行它时,我收到了错误消息: 在q1.pl的串联(.)或字符串中使用未初始化值$1 第12行,第1行 返回

我正在尝试编写一个Perl程序,该程序接受输入模式,并使用括号中包含的匹配部分打印字符串。例如,如果我输入regex“.p”,字符串是“develing”,它应该打印“devel(op)ing”

这是我的节目:

if (/($pattern)/) {
    $_ =~ s/$1/($1)/;
    print;
} else {
    print "no match\n";
}
当我运行它时,我收到了错误消息:

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

返回了字符串“devel()ing”。
我做了一些研究,似乎$1未初始化,因为字符串不匹配,但在我的情况下,应该始终初始化$1,因为我在匹配后用“if…else…”检查,
$1
包含字符串
op

替换比匹配
op
,但搜索部分中没有括号,因此
$1
被清除,并且没有任何东西可以替换
op

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

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

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

替换比匹配
op
,但搜索部分中没有括号,因此
$1
被清除,并且没有任何东西可以替换
op

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

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

替换中的
$1
包含匹配中的第一个捕获组,但正则表达式中没有捕获组。您可以使用
$&
获得正则表达式匹配的所有内容

s/$1/($&)/;

替换中的
$1
包含匹配中的第一个捕获组,但正则表达式中没有捕获组。您可以使用
$&
获得正则表达式匹配的所有内容

s/$1/($&)/;

仅供参考,您可以省略匹配并在条件中进行替换,而不是先进行匹配再进行替换。
s//
的返回值是进行的替换次数,在您的情况下,替换次数为1(真)或0(假)。仅供参考,您可以省略匹配,然后在条件中进行替换,而不是先进行匹配,然后再进行替换。
s//
的返回值是进行的替换次数,在您的情况下,替换次数为1(真)或0(假)。