【发布时间】:2015-07-07 12:08:22
【问题描述】:
考虑以下示例:
my $text = "some_strange_thing";
$text =~ s/some_(\w+)_thing/no_$1_stuff/;
print "Result: $text\n";
打印出来
“结果:没有_奇怪_stuff”
到目前为止一切顺利。
现在,我需要从外部来源(用户输入、配置文件等)获取匹配和替换模式。 天真的解决方案似乎是这样的:
my $match = "some_(\\w+)_thing";
my $repl = "no_\$1_stuff";
my $text = "some_strange_thing";
$text =~ s/$match/$repl/;
print "Result: $text\n";
但是:
“结果:没有_$1_stuff”。
怎么了?如何使用外部提供的模式获得相同的结果?
【问题讨论】:
-
你为什么在
$repl中逃脱$?试试这个:my $repl = "no_$1_stuff";. -
@VladimirSerykh - 如果你仔细想想,为什么会产生
no__stuff应该很明显。 -
@DanielMartin 我对 Perl 中的字符串一无所知。但我知道一些正则表达式。
-
试过了。 Perl 说“在连接 (.) 或字符串中使用未初始化的值”
标签: regex perl substitution