Не могли бы вы помочь мне найти регулярное выражение, которое можно извлечь из URL:
имя хоста, если в указанном пути не указана папка например
http://jj.com/' -> 'jj.com http://jj.com/index.php' -> 'jj.com http://jj.com/query?q=http://kk.uk' -> 'jj.com
имя хоста + одна папка из пути, если в пути указана хотя бы одна папка например,
'http://jj.com/site/index.php' -> 'jj.com/site' 'http://jj.com/site/second/aldldls.html' -> 'jj.com/site'
Можно ли сделать это только одним регулярным выражением?
Кстати, я буду использовать функцию regex_extract из улья, но любой вариант регулярного выражения (например, perl regex), который может это сделать, был бы чрезвычайно полезен.
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
#!/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
Выход: