1

我有以下网址:

http://stagingbugzilla.cpiv.com/html/estVerificationPool/estPendingBugs.php?team_name=General%20administration

需要以正确的方式提取“?”之后的值 需要找到如何在 perl 中仅将http://example.com部分从字符串中分解出来,并将其存储在自己的变量中,将其拆分并在传递之前保存在变量中。

4

5 回答 5

10

不要自己做,使用URI模块,它旨在理解这类数据。

my $uri = URI->new('http://hostname.com/...?...');
$uri->query;  # The value after the '?'
$uri->scheme; # "http"
$uri->host;   # hostname.com
于 2013-05-21T05:14:54.923 回答
3

答案的扩展,包括query_param

use URI;
use URI::QueryParam;
my $url = 'http://stagingbugzilla.cpiv.com/html/estVerificationPool/estPendingBugs.php?team_name=General%20administration';
my $uri = URI->new( $url );
my @keys = $uri->query_param(); 
# @keys contains the query parameter names
my $team_name = $uri->query_param( 'team_name' ); 
# $team_name contains the value of the team_name parameter
于 2013-05-21T07:06:28.140 回答
2

这只是需要的简单拆分吗?如果是这样...

my $foo = "http://stagingbugzilla.cpiv.com/html/estVerificationPool/estPendingBugs.php?team_name=General%20administration";
my @values = split( '\?', $foo );
print $values[1];

有更好的方法可以更多地了解 URL,但如果这样做可以解决问题......

于 2013-05-21T07:13:00.507 回答
1

这个正则表达式:

^http://([^/]*)/[^?]*\?(.*)$

应用于此字符串时:

http://stagingbugzilla.cpiv.com/html/estVerificationPool/estPendingBugs.php?team_name=General%20administration

将产生这些捕获的模式

1. stagingbugzilla.cpiv.com
2. team_name=General%20administration

Perl 的完整代码是:

$url = "http://stagingbugzilla.cpiv.com/html/estVerificationPool/estPendingBugs.php?team_name=General%20administration";
($domain, $query) = ($url =~ m{^http://([^/]*)/[^?]*\?(.*)$});

使用$domain$query成为您想要的部分,尽管使用像 Pilcrow 建议的内置库可能更明智。

于 2013-05-21T05:19:28.220 回答
1

要提取 之后的值?,请使用

$url="http://stagingbugzilla.cpiv.com/html/estVerificationPool/estPendingBugs.php?team_name=General%20administration";
($query) = $url =~ /.+?\?(.+)/;

从 url 获取域名并保存在 save 变量中

($url) = $url =~ m{(http://.+?)/};

希望这会有所帮助

于 2013-05-21T05:25:19.447 回答