2012-10-01 31 views
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}; 

感谢您的帮助!

+0

哪里这个字符串来自?因为HTTP服务器照原样了解** QUERY_STRING **。正则表达式可能不是最好的解决方案。 –

+0

@sputnick,也许他解析HTML并处理其中的网址? – ikegami

回答

5
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对象,如果您需要这种类型的东西,您会发现它们很有用。

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