Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
Perl 使用变量作为正则表达式替换参数_Perl - Fatal编程技术网

Perl 使用变量作为正则表达式替换参数

Perl 使用变量作为正则表达式替换参数,perl,Perl,我一直在搜索,没有找到答案。为什么这不起作用 $self->{W_CONTENT} =~ /$regex/; print $1; #is there a value? YES $store{URL} =~ s/$param/$1/; 是的,1美元有价值$param被替换,但它被替换为nothing。我肯定1美元有价值。如果我替换为文本而不是“$1”,它可以正常工作。请帮忙 表达式中不应使用$1之类的反向引用;您可以使用不同的表示法-有关概述,请查看 考虑获取$1的

我一直在搜索,没有找到答案。为什么这不起作用

    $self->{W_CONTENT} =~ /$regex/;
    print $1; #is there a value? YES
    $store{URL} =~ s/$param/$1/;

是的,1美元有价值$param被替换,但它被替换为nothing。我肯定1美元有价值。如果我替换为文本而不是“$1”,它可以正常工作。请帮忙

表达式中不应使用$1之类的反向引用;您可以使用不同的表示法-有关概述,请查看


考虑获取$1的值并将其存储在另一个变量中,然后在正则表达式中使用该值。

表达式中不应使用$1之类的反向引用;您可以使用不同的表示法-有关概述,请查看


考虑获取$1的值并将其存储在另一个变量中,然后在正则表达式中使用该值。

For
$1
要有一个值,您需要确保
$param
中有括号
()
。i、 e.以下问题与您所解释的问题类似

my $fred = "Fred";
$fred =~ s/red/$1/;
# $fred will now be "F"
但这是有效的

my $fred = "Fred";
$fred =~ s/r(ed)/$1/;
# $fred will now be "Fed"
现在,如果您想在第二个正则表达式中使用第一个正则表达式中的
$1
,您需要复制它。每个正则表达式求值重置
$1
<代码>$&。所以你想要的是:

$self->{W_CONTENT} =~ /$regex/;
print $1; #is there a value? YES
my $old1 = $1;
$store{URL} =~ s/$param/$old1/;

要使
$1
具有值,您需要确保
$param
中包含括号
()
。i、 e.以下问题与您所解释的问题类似

my $fred = "Fred";
$fred =~ s/red/$1/;
# $fred will now be "F"
但这是有效的

my $fred = "Fred";
$fred =~ s/r(ed)/$1/;
# $fred will now be "Fed"
现在,如果您想在第二个正则表达式中使用第一个正则表达式中的
$1
,您需要复制它。每个正则表达式求值重置
$1
<代码>$&。所以你想要的是:

$self->{W_CONTENT} =~ /$regex/;
print $1; #is there a value? YES
my $old1 = $1;
$store{URL} =~ s/$param/$old1/;

非常感谢。这很有效。我在玩括号,但我不认为1美元被重置。棘手的您可能会考虑<代码> S/\Q$PARAM\E/OLD1/1/代码>,如果有任何可能,<代码> $PARAM < /C>将包含元字符。谢谢!!!这很有效。我在玩括号,但我不认为1美元被重置。棘手的您可能会考虑<代码> S/\Q$PARAM\E/OLD1/<代码>,如果有任何可能,<代码> $PARAM < /C> >将包含元字符。