Regex 使用“替换法”$1“;一串
如果运行代码,则输出为“Regex 使用“替换法”$1“;一串,regex,perl,Regex,Perl,如果运行代码,则输出为“$1”,但我想查看“bc” $grep2无法直接放入正则表达式中,因为输入值为 我该怎么做呢?在这个特定的上下文中,一个解决方案是使用/e修饰符两次 my $st = 'abcd'; my $grep1 = 'a(bc)d'; my $grep2 = '$1'; $st =~ s/$grep1/$grep2/; print $st,"\n"; 产出: #!/usr/bin/env perl use strict; use warnings; my $st = 'ab
$1
”,但我想查看“bc
”
$grep2
无法直接放入正则表达式中,因为输入值为
我该怎么做呢?在这个特定的上下文中,一个解决方案是使用/e修饰符两次
my $st = 'abcd';
my $grep1 = 'a(bc)d';
my $grep2 = '$1';
$st =~ s/$grep1/$grep2/;
print $st,"\n";
产出:
#!/usr/bin/env perl
use strict;
use warnings;
my $st = 'abcd';
my $grep1 = 'a(bc)d';
my $grep2 = '$1';
$st =~ s/$grep1/$grep2/ee;
print $st,"\n";
为了使它不那么脆弱,我建议将您的RHS用两组引号括起来:
bc
注意:正如ikegami所提到的,回避未经认可的输入是极其危险的。因此,我不建议在一般情况下这样做。此外,可能有更好的解决方案可供您使用,但您首先必须弄清问题的本质。在此特定上下文中,一种解决方案是使用/e修饰符两次
my $st = 'abcd';
my $grep1 = 'a(bc)d';
my $grep2 = '$1';
$st =~ s/$grep1/$grep2/;
print $st,"\n";
产出:
#!/usr/bin/env perl
use strict;
use warnings;
my $st = 'abcd';
my $grep1 = 'a(bc)d';
my $grep2 = '$1';
$st =~ s/$grep1/$grep2/ee;
print $st,"\n";
为了使它不那么脆弱,我建议将您的RHS用两组引号括起来:
bc
注意:正如ikegami所提到的,回避未经认可的输入是极其危险的。因此,我不建议在一般情况下这样做。此外,可能有更好的解决方案可供您使用,但您首先必须弄清问题的本质。以下内容将满足您的要求:
$st =~ s/$grep1/qq{qq{$grep2}}/ee;
此解决方案的优点是它不允许执行任意代码,例如
eval EXPR
(又称/ee
)执行的代码。以下操作将满足您的需要:
$st =~ s/$grep1/qq{qq{$grep2}}/ee;
此解决方案的优点是它不允许执行任意代码,例如
eval EXPR
(又称/ee
)执行的代码。谢谢body~这是一个简单而伟大的答案!这是一个糟糕的答案。这个解决方案非常危险,你甚至都没提到!对于my$grep2='[$1]'它也会失败代码>,我确信OP希望生成[bc]
@ikegami是的,这很危险,警告补充道。是的,我知道解决方案是脆弱的,如果输入不同,就会失败,这就是为什么我已经提供了第二个不那么脆弱的选项。不管怎样,我很乐意投票支持你的cpan模块建议。你在说什么?你的第二个解决方案也没有更好。它可能处理my$grep2='[$1]'
,但对于my$grep2='}$1{';
,它失败了。更重要的是,它同样危险,允许执行任意代码。感谢body~这是一个简单而伟大的答案!这是一个糟糕的答案。这个解决方案非常危险,您甚至没有提到它!对于my$grep2='[$1]它也失败了“;
,我确信OP希望产生[bc]
@ikegami是的,这是危险的,警告补充道。是的,我知道解决方案很脆弱,如果输入不同,就会失败,这就是为什么我已经提供了第二个不那么脆弱的选项。不管怎样,我很乐意投你的cpan模块建议票。你在说什么?你的第二个解决方案没有更好。它可能处理我的$grep2='[$1]';
,但是对于my$grep2='}$1{';
,它失败了。更重要的是,它同样危险,允许执行任意代码。您也可以这样做。请参阅,也可以这样做。请参阅和