正则表达式提取查询字符串

时间:2012-10-01 16:53:56

标签: regex perl

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

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

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

如果您可以将其转换为哈希值,那就更棒了:

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

感谢您的帮助!

2 个答案:

答案 0 :(得分: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对象添加更多方法,如果您需要这些东西,这些方法会很有用。

答案 1 :(得分: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;
}

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