Поскольку parse_url()
использует регулярные выражения в любом случае, мы можем также изобрести колесо и создать регулярное выражение замену для того, чтобы построить сладкий и фантазии gsub
вызова.
Давайте посмотрим. URL-адрес состоит из протокола, «netloc», который может включать имя пользователя, пароль, имя хоста и компоненты порта, а также остаток, который мы счастливо убираем. Предположим, что сначала нет ни имени пользователя, ни пароля, ни порта.
^(?:(?:[[:alpha:]+.-]+)://)?
будет соответствовать заголовок протокола (скопированный из parse_url()
), мы вскрышных это далеко, если мы находим
- Кроме того, потенциальный
www.
префикс отбрасываются, но не захватили: (?:www\\.)?
- Anything вверх к последующему слэш будет наше полное имя хоста, которое мы фиксируем:
([^/]+)
- остальное мы игнорируем:
.*$
Теперь мы подключить вместе регулярные выражения выше, и извлечение имени хоста становится:
PROTOCOL_REGEX <- "^(?:(?:[[:alpha:]+.-]+)://)?"
PREFIX_REGEX <- "(?:www\\.)?"
HOSTNAME_REGEX <- "([^/]+)"
REST_REGEX <- ".*$"
URL_REGEX <- paste0(PROTOCOL_REGEX, PREFIX_REGEX, HOSTNAME_REGEX, REST_REGEX)
domain.name <- function(urls) gsub(URL_REGEX, "\\1", urls)
Изменить имя хоста регулярное выражение включает (но не захват) порт:
HOSTNAME_REGEX <- "([^:/]+)(?::[0-9]+)?"
и так далее, и и так далее, пока мы наконец не достигнем RFC-compliant regular expression for parsing URLs. Тем не менее, для домашнего использования, выше должно хватить:
> domain.name(c("test.server.com/test", "www.google.com/test/index.asp",
"http://test.com/?ex"))
[1] "test.server.com" "google.com" "test.com"
Какой у вас предполагаемый выход? – Thomas
Идеальный случай был бы тем, что разделяет такие вещи, как [tldextract] (https://pypi.python.org/pypi/tldextract), но если это не доступно, я хотел бы вернуть строку до конца домена верхнего уровня (например, .com или .edu). Предпочтительно, он также удалит http: // и www. и другие префиксы, подобные этому. –
Не могли бы вы дать нам пример вывода того, что вы ожидаете от своего примера, вместо того, чтобы давать нам URL для синтаксического анализа и чтения. –