正则表达式帮助 - 来自网址的目录

时间:2011-06-15 19:06:58

标签: regex perl

我的网址如下。

<a href="http://cdn1.xyz.com/testone/2010/a.jpg">
<a href="http://cdn2.xyz.com/testtwo/2010/a.jpg">

我想提取网址的第一部分。例如:http://cdn1.xyz.com/testonehttp://cdn2.xyz.com/testtwo。什么是匹配该格式的正则表达式。

谢谢。

4 个答案:

答案 0 :(得分:6)

如果您需要从HTML中提取链接,请使用类似HTML::SimpleLinkExtor的内容来处理该部分。

网址微妙复杂,变得越来越复杂。你使用的正则表达式将不可避免地出错。您可以使用URI模块解析URL,然后对其进行修改。

use URI;
my $uri = URI->new($url_string);

现在我们将$ uri作为对象,我们可以只获取路径部分并更改它以切断我们不想要的任何内容。

# Get the path already split into pieces
my @path = $uri->path_segments;

# Put just the first bit back, also clear the query 
$uri->path_query($path[0]);

# clear any "#foo" it might have
$uri->fragment(undef);

现在$ uri就是你想要的。它的字符串重载,所以你可以使用$ uri作为字符串。

答案 1 :(得分:2)

if ($string =~ m{([^:]+://[^/]+/[^/]+)}) {
  print $1;
} else {
  print 'no match';
}

也可以试试这个。

答案 2 :(得分:1)

尝试:

$url =~ m{([^:]*://.*?\.[a-z]*?/[^/]*)/.*};

我可能会建议您查找与网址匹配的正则表达式模块。这是一个常见的,有时很困难的任务,有些包装可能做得非常好。如果您的需求非常简单,您可以保证网址简单,但我不会打扰。

答案 3 :(得分:1)

不太好,但运作良好

$url='<a href="http://cdn1.xyz.com/testone/2010/a.jpg">';
$url =~ m|(\w+)://([^/:]+)(:\d+)?/(.*)|;
$aa=$4;
($aa)=split('\/',$aa);
$wanted=$1.'://'.$2.'/'.$aa;
print $wanted;

品脱http://cdn1.xyz.com/testone