我有以下网址:
在“?”之后需要以正确的方式提取值 需要找到如何在perl中爆炸 只是字符串中的http://example.com部分,并将其存储在自己的变量中,在传递之前将其拆分并保存在变量中。
答案 0 :(得分:10)
不要自己动手,使用URI模块,该模块旨在理解这类数据。
my $uri = URI->new('http://hostname.com/...?...');
$uri->query; # The value after the '?'
$uri->scheme; # "http"
$uri->host; # hostname.com
答案 1 :(得分:3)
this答案的扩展,包括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
答案 2 :(得分:2)
这只是一个简单的拆分吗?如果是的话......
my $foo = "http://stagingbugzilla.cpiv.com/html/estVerificationPool/estPendingBugs.php?team_name=General%20administration";
my @values = split( '\?', $foo );
print $values[1];
有更好的方法可以识别更多URL,但如果这样做的话......
答案 3 :(得分: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建议的内置库可能更明智。
答案 4 :(得分:1)
要在?
之后提取值,请使用
$url="http://stagingbugzilla.cpiv.com/html/estVerificationPool/estPendingBugs.php?team_name=General%20administration";
($query) = $url =~ /.+?\?(.+)/;
从网址获取域名并保存在保存变量
中($url) = $url =~ m{(http://.+?)/};
希望这会有所帮助