你能帮我找出一个从url中提取的正则表达式:
主机名,如果后面的路径中没有指定文件夹 例如
http://jj.com/' -> 'jj.com
http://jj.com/index.php' -> 'jj.com
http://jj.com/query?q=http://kk.uk' -> 'jj.com
当路径中至少指定了一个文件夹时,主机名+路径中的一个文件夹 e.g。
'http://jj.com/site/index.php' -> 'jj.com/site'
'http://jj.com/site/second/aldldls.html' -> 'jj.com/site'
只用一个正则表达式可以做到吗?
BTW我将使用来自hive的regex_extract函数,但任何可以做到这一点的正则表达式(例如perl regex)的变化都非常有用。
答案 0 :(得分:2)
use 5.010;
use URI;
for (
'http://jj.com/',
'http://jj.com/index.php',
'http://jj.com/query?q=http://kk.uk',
'http://jj.com/site/index.php',
'http://jj.com/site/second/aldldls.html',
) {
my $u = URI->new($_);
say (
($u->path_segments)[2]
? join q(/), $u->host, ($u->path_segments)[1]
: $u->host
);
}
输出
jj.com
jj.com
jj.com
jj.com/site
jj.com/site
答案 1 :(得分:1)
#!/usr/bin/perl
use strict;
use warnings;
for (<DATA>) {
s!^http://([^/]+/([^\?/]+/)?).*!$1!;
s!/\s*$!!;
print "$_\n";
}
__DATA__
http://jj.com/
http://jj.com/index.php
http://jj.com/query?q=http://kk.uk
http://jj.com/site/index.php
http://jj.com/site/second/aldldls.html
输出:
jj.com
jj.com
jj.com
jj.com/site
jj.com/site