2012-10-01 29 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