3

我对正则表达式比较陌生,可以使用一些帮助。有人可以提供正则表达式(我正在使用 Perl)从 URL 中提取查询字符串吗?我尝试了以下但得到一个空字符串:

my $string = 'http://www.google.com?queryArg1=1&queryArg2=2';
$string =~ s/^(.*)?//;

理想情况下,此示例将提供以下字符串:queryArg1=1&queryArg2=2

如果你能把它变成一个哈希,那就更棒了:

my $hash = {queryArg1 => 1,
            queryArg2 => 2};

谢谢你的帮助!

4

2 回答 2

6
use URI qw( );

my $uri = 'http://www.google.com?queryArg1=1&queryArg2=2';
$uri = URI->new($uri);

my $query = $uri->query();
say $query;

my %form = $uri->query_form();
say "$_: $form{$_}"
   for keys(%form);

使用平面散列显然不能处理重复的参数,并且会丢失参数顺序。加载URI::QueryParam会为 URI 对象添加更多方法,如果您需要这些方法,您会发现这些方法很有用。

于 2012-10-01T17:19:09.130 回答
2

如果你能把它变成一个哈希,那就更棒了

这很简单:

use CGI();
my $url = 'http://www.google.com?queryArg1=1&queryArg2=2';
my $hash = {};
if( $url =~ /\?(.*)$/ ) {
    my $cgi = CGI->new($1);
    $hash = $cgi->Vars;
}

没有自行车,只有 1 个简单的正则表达式和标准模块 CGI

于 2012-10-01T18:36:10.667 回答