Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用“替换法”$1“;一串_Regex_Perl - Fatal编程技术网

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{';
,它失败了。更重要的是,它同样危险,允许执行任意代码。您也可以这样做。请参阅,也可以这样做。请参阅和