使用perl中的正则表达式切割部分url

时间:2013-05-21 05:13:39

标签: regex perl

我有以下网址:

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

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

5 个答案:

答案 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://.+?)/};

希望这会有所帮助