我的网址如下。
<a href="http://cdn1.xyz.com/testone/2010/a.jpg">
<a href="http://cdn2.xyz.com/testtwo/2010/a.jpg">
我想提取网址的第一部分。例如:http://cdn1.xyz.com/testone或http://cdn2.xyz.com/testtwo。什么是匹配该格式的正则表达式。
谢谢。
答案 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