Соответствие TLD и расширению файла из URL - PullRequest
0 голосов
/ 29 июля 2011

Я работаю над программой и мне нужно извлечь TLD и расширение веб-страницы из URL

Например: http://www.example.com/somedir/someotherdir/index.html должно дать мне TLD .com и расширение Html

Хотя это: http://www.example.com.au/somedir/someotherdir/index/ должно дать мне TLD .com.au и расширение null

Есть ли способ сделать это с помощью Regex в Perl?Я использую модуль URI в Perl, но он не может выполнить этот тип извлечения.

Ответы [ 2 ]

3 голосов
/ 29 июля 2011

Если вы используете модуль URI, вы можете легко извлечь host и path.Тогда просто взять все после последней точки или наоборот убрать все до последней точки, включая последнюю.Возможно, вы захотите усложнить расширение, чтобы правильно обрабатывать случаи, когда расширение отсутствует.

($tld = $uri->host) =~ s/.*\.//;

($extension = $uri->path) =~ s/.*\///;
$extension = '' unless $extension =~ s/.*\.//;
0 голосов
/ 29 июля 2011

Регулярное выражение, представленное в RFC-3986, Приложение B , может быть изменено для выполнения этой задачи:

if ($urltext =~ m!
    ^                 # Anchor to start of string.
    (?:[^:/?#\s]+:)?  # Optional URI scheme.
    //[^:/?#\s]+\.    # Required (non-IP) host (up to TLD)
    ([^:/?#\s.\d]+)   # $1: Top level domain(TLD)
    (?::\d+)?         # Optional port.
    /                 # Required path separator.
    [^?#\s]*\.        # Path up to file extension.
    ([^?#\s.]+)       # $2: File extension.
    (?:\?[^#\s]*)?    # Optional query.
    (?:\#\S*)?        # Optional fragment.
    $                 # Anchor to end of string.
    !x) {
    $tld = $1;
    $ext = $2;
} else {
    # no match
}

(Примечание: кажется, что подсветка синтаксиса SO не может обрабатывать регулярные выражения режима Perl 'x')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...