我对正则表达式比较新,可以使用一些帮助。有人可以提供正则表达式(我使用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 :(得分: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