我需要使用find和替换正则表达式,如下面的
use strict;
no strict 'refs';
use warnings;
use JSON;
use Encode qw( encode decode encode_utf8 decode_utf8);
my $data =
{
"find_replace" => [
{ "find" => "(.+?)&",
"replace"=> "$1"
}
]
};
my $find_replace_arr = $data->{'find_replace'};
my $string = "http://www.website.com/test.html&code=236523";
my $find = $find_replace_arr->[0]->{find};
my $replace = $find_replace_arr->[0]->{replace};
$string =~ s/$find/$replace/isge;
print $string;
exit();
在此代码中,我只想从字符串中“http://www.website.com/test.html”。
我无法动态获取替换(键)的值,即$ 1.
您可以运行上述代码。
此代码抛出字符串
中未初始化值$ 1的错误使用
答案 0 :(得分:4)
要考虑的一些事情。首先,正则表达式([^&]+)
可能无法提供所需的结果,因为它实际上将捕获并替换为相同的捕获..导致相同的输出字符串(令我感到困惑)。
接下来,必须再次引用替换字符串"$1"
,并且e
修饰符必须加倍。
所以试试这个:
my $data =
{
"find_replace" => [
{ "find" => "^(.+?)&.*",
"replace"=> '"$1"'
}
]
};
my $find_replace_arr = $data->{'find_replace'};
my $string = "http://www.website.com/test.html&code=236523";
my $find = $find_replace_arr->[0]->{find};
my $replace = $find_replace_arr->[0]->{replace};
$string =~ s/$find/$replace/isgee;
print $string;
exit();
请注意,新的正则表达式^(.+?)&.*
将匹配整个字符串,但捕获(...)
将是要替换的结果。