Regex 如何在perl中替换匹配的模式
我正在尝试编写一个Perl程序,该程序接受输入模式,并使用括号中包含的匹配部分打印字符串。例如,如果我输入regex“.p”,字符串是“develing”,它应该打印“devel(op)ing” 这是我的节目: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行 返回
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(假)。