Извлечь хост + одну папку из пути - PullRequest
0 голосов
/ 15 декабря 2011

Не могли бы вы помочь мне найти регулярное выражение, которое можно извлечь из URL:

  1. имя хоста, если в указанном пути не указана папка например

    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'
    

Можно ли сделать это только одним регулярным выражением?

Кстати, я буду использовать функцию regex_extract из улья, но любой вариант регулярного выражения (например, perl regex), который может это сделать, был бы чрезвычайно полезен.

Ответы [ 2 ]

2 голосов
/ 15 декабря 2011
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 голос
/ 15 декабря 2011
#!/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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...