gpt4 book ai didi

regex - 用编码字符串替换 URL 的多个部分

转载 作者:行者123 更新时间:2023-12-02 07:34:26 24 4
gpt4 key购买 nike

我找到了这段 Perl 代码:

$url = "http://example.com/?param1=#param1#&param2=#param2#"
$param1="hello";
$param2="world";
$url =~ s/#param1#/$param1/g;
$url =~ s/#param2#/$param2/g;

=~ 运算符应用正则表达式并替换原始变量 ($url)。Perl 中有没有一种方法可以将更改应用到另一个变量,并在一个语句中应用两个正则表达式?

看起来像这样的东西:

$url_template = "http://example.com/?param1=#param1#&param2=#param2#"
$param1="hello";
$param2="world";
$url = $url_template ~ s/#param1#/$param1/g ~ s/#param2#/$param2/g;

此代码无效。问题是:如何让它发挥作用?

还有,有没有更好的方法来格式化字符串?例如

String.format("http://example.com/?param1={param1}&param2={param2}", {"param1": param1, "param2": param2}).

最后,有没有更好的方法来格式化 URL 参数(以便它们被正确编码)?例如

URL.format("http://example.com/?param1={param1}&param2={param2}", {"param1": param1, "param2": param2}).

更新:基于 choroba 和 aleroot 的完整答案:

my $template_url = "http://example.com/?param1=#param1#&param2=#param2#";
my %params = (param1 => 'hello1', param2 => 'world2');
(my $url = $template_url) =~ s/#(.*?)#/$params{$1}/g;

对于 URL 编码,使用 URL::Encode .

最佳答案

Perl 绑定(bind)运算符是=~,而不是~=。不可能一次进行两次替换,但是可以使用 /g 进行多次替换:

#!/usr/bin/perl
use warnings;
use strict;

my $url = 'http://example.com/?param1=#param1#&param2=#param2#';
my %params = ( param1 => 'hello',
param2 => 'world',
);
$url =~ s/#(.*?)#/$params{$1}/g;
print $url, "\n";

对于 URL 编码,使用 URL::Encode .

关于regex - 用编码字符串替换 URL 的多个部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18249528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com