3

私は正規表現に比較的慣れていないので、助けが必要です。URL からクエリ文字列を抽出する正規表現 (私は Perl を使用しています) を提供できますか? 私は次のことを試しましたが、空の文字列を取得します:

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 に答える