Regex Perl正则表达式和替换URL字符串上的替换

Regex Perl正则表达式和替换URL字符串上的替换,regex,perl,Regex,Perl,嘿,我有一些关于Perl的基本问题 我有一个这样的链接 my $url = "http://test.com/index.php?id=123&test=1&l=1"; 我有三个价值观。我想数一数身份证,然后打开它 页面不是静态的。因此,基本URL可能会更改或更改查询参数 我需要一个正则表达式,比如*?*=*&*,我想计算每个参数中的数字 另一个问题是,我想在参数计数中添加a,如1a、2a、3a等,并为每个修改的参数启动一些请求 要匹配所有url参数并将每个参数名称和值捕获为每

嘿,我有一些关于Perl的基本问题

我有一个这样的链接

my $url = "http://test.com/index.php?id=123&test=1&l=1";
我有三个价值观。我想数一数身份证,然后打开它

页面不是静态的。因此,基本URL可能会更改或更改查询参数

我需要一个正则表达式,比如*?*=*&*,我想计算每个参数中的数字

另一个问题是,我想在参数计数中添加a,如1a、2a、3a等,并为每个修改的参数启动一些请求


要匹配所有url参数并将每个参数名称和值捕获为每个匹配的组1和组2,请执行以下操作:

/(?<=[?&])(\w+)=(\w+)/

看。

我实际上会这样做:

#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;

my $url = "http://test.com/index.php?id=123&test=1&l=1";

my %param = $url =~ m/(\w+)\=(\w+)/g;

print Dumper \%param;
如果要“向所有参数添加a”:

$url =~ s/(\w+=\w+)/$1a/g;
最好使用该模块来操作URL

下面是一个从URL的查询组件构建哈希%查询的示例

我不明白你的意思,我想数一数身份证,然后打开它。。id参数的值在$query{id}中,是123,但我无法想象它的计数可能是多少

我使用Data::Dump仅显示结果哈希的内容。这在生产代码中不是必需的

use strict;
use warnings;

use URI;

my $url = URI->new('http://test.com/index.php?id=123&test=1&l=1');
my %query = $url->query_form;

use Data::Dump;
dd \%query;
输出 使现代化 听起来您希望创建几个新的URL,并在每个查询参数的值中依次添加一个a

下面是一个如何工作的例子

use strict;
use warnings;

use URI;
use URI::QueryParam;

my $url = URI->new('http://test.com/index.php?id=123&test=1&l=1');

for my $param ( $url->query_param ) {
    my $new_url = $url->clone;
    $new_url->query_param($param => $url->query_param($param) . 'a');
    print $new_url, "\n";
}
输出
很好的一个问题,我现在如何计算每个参数并从中生成一个新链接?这是一个单独的问题:请问一个新问题“计算每个参数中的数字”是什么意思?你能举个例子吗?同样-添加一个a-你的新URL看起来像什么?我想你是指我的$URL…就是这样!这是解决方案一,现在是另一部分。这是新事物。我想计算每个参数,就像我得到一个ur test.com/inde.xpph?id=2&test=4一样我想把所有参数拆分成id=2和test=4这样的字符串,然后我想生成一个id=1-100和test=1-100这样的列表,这就是我想要的need@user5293028:这还是有点不清楚。是否要创建id和测试参数从1到100的所有可能URL?有一万个不同的网址像这样。我已经给了你做你需要的事情的工具。我建议您尝试自己采取这一步,因为这并不难,如果您陷入困境,您应该发布一个新问题来解释问题并显示代码注释:这假设所有命名参数都不会重复。这可能很好。不,我想生成一个list.txt,perl脚本应该将每个参数中的URL参数拆分,并将值从1计算到100,然后将它们写入.txt,如id=1\n id=2\n id=3\n,然后写入append test=1\n test=2\n等等
use strict;
use warnings;

use URI;
use URI::QueryParam;

my $url = URI->new('http://test.com/index.php?id=123&test=1&l=1');

for my $param ( $url->query_param ) {
    my $new_url = $url->clone;
    $new_url->query_param($param => $url->query_param($param) . 'a');
    print $new_url, "\n";
}
http://test.com/index.php?id=123a&test=1&l=1
http://test.com/index.php?id=123&test=1a&l=1
http://test.com/index.php?id=123&test=1&l=1a