我试图编写一个接受输入模式的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 ..."
答案 0 :(得分:1)
匹配后,$1
包含字符串op
。
替换与op
匹配,但搜索部分没有括号,因此$1
被清除,并且没有任何内容可以替代op
。
添加括号以再次创建捕获组:
s/($1)/($1)/;
答案 1 :(得分:0)
downloadAllImages()
包含匹配中的第一个捕获组,但正则表达式中没有捕获组。您可以使用$1
来获取正则表达式匹配的所有内容。
$&