提取主机+路径中的一个文件夹

发布于 2024-12-21 04:00:35 字数 545 浏览 0 评论 0原文

你能帮我找出一个正则表达式,

  1. 当其后面的路径中没有指定文件夹时,该正则表达式将从 url:

    host name 中提取 例如

    http://jj.com/'-> 'jj.com
    http://jj.com/index.php'-> 'jj.com
    http://jj.com/query?q=http://kk.uk' -> 'jj.com
    
  2. 主机名 + 路径中的一个文件夹(当路径中至少指定了一个文件夹时) 例如

    'http://jj.com/site/index.php' -> 'jj.com/site'
    'http://jj.com/site/second/aldldls.html' -> 'jj.com/site'
    

是否可以仅使用一个正则表达式来做到这一点?

顺便说一句,我将使用 hive 中的 regex_extract 函数,但任何可以做到这一点的正则表达式变体(例如 perl 正则表达式)都将非常有用。

Could you help me figure out a regular expression that would extract from url:

  1. host name when there is no folder specified in the path that follows it
    e.g.

    http://jj.com/' -> 'jj.com
    http://jj.com/index.php' -> 'jj.com
    http://jj.com/query?q=http://kk.uk' -> 'jj.com
    
  2. host name + one folder from path when there is at least one folder specified in the path
    e.g.

    'http://jj.com/site/index.php' -> 'jj.com/site'
    'http://jj.com/site/second/aldldls.html' -> 'jj.com/site'
    

Is it possible to do that with just one regular expression?

BTW I will be using regex_extract function from hive but any variation of regex (e.g. perl regex) that can do that would be extremely useful.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

淡莣 2024-12-28 04:00:35
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
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
    );
}

Output

jj.com
jj.com
jj.com
jj.com/site
jj.com/site
壹場煙雨 2024-12-28 04:00:35
#!/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
#!/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

Output:

jj.com
jj.com
jj.com
jj.com/site
jj.com/site
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文