Очень Простой вопрос Regex

У меня есть очень простой regex вопрос. Предположим, что у меня есть 2 условия:

  1. URL =http://www.abc.com/cde/def
  2. URL =https://www.abc.com/sadfl/dsaf

Как я могу извлечь baseUrl, использующий regex?

Демонстрационный вывод:

  1. http://www.abc.com
  2. https://www.abc.com

9
задан Michael Mrozek 8 June 2010 в 03:33
поделиться

7 ответов

Как здесь:

String baseUrl;
Pattern p = Pattern.compile("^(([a-zA-Z]+://)?[a-zA-Z0-9.-]+\\.[a-zA-Z]+(:\d+)?/");
Matcher m = p.matcher(str); 
if (m.matches())
    baseUrl = m.group(1);

Однако, вы должны использовать URI class вместо этого, как здесь:

URI uri = new URI(str);
8
ответ дан 2 November 2019 в 23:59
поделиться

Один лайнер без регулярного выражения:

String baseUrl = url.substring(0, url.indexOf('/', url.indexOf("//")+2));
2
ответ дан 2 November 2019 в 23:59
поделиться

/^(https?\:\/\/\/[^\/]+).*/$1/

Это перехватит ЛЮБОЕ, что начинается с http, а $1 будет содержать все от начала до первого / после //

1
ответ дан 2 November 2019 в 23:59
поделиться

За исключением сценариев записи и удаления, вы должны всегда воздерживаться от синтаксического анализа сложных синтаксисов (адресов электронной почты, URL-адресов, HTML-страниц и т. Д.) С использованием регулярных выражений.

поверьте мне, вы рано или поздно укусите.

1
ответ дан 2 November 2019 в 23:59
поделиться

Я почти уверен, что существует класс Java, позволяющий манипулировать путями, но если это должно быть регулярное выражение,

https?://[^/]+

подойдет. ( s? включены также для обработки https: )

0
ответ дан 2 November 2019 в 23:59
поделиться

Вот регулярное выражение, которое должно удовлетворять заданной задаче.

https?://[^/]*

Полагаю, вы спрашиваете об этом частично, чтобы получить больше знаний о регулярных выражениях. Если, однако, вы пытаетесь извлечь хост из URL-адреса, возможно, гораздо правильнее использовать более надежные методы синтаксического анализа Java:

String urlStr = "https://www.abc.com/stuff";
URL url = new URL(urlStr);
String host = url.getHost();
String protocol = url.getProtocol();
URL baseUrl = new URL (protocol, host);

Это лучше, поскольку он должен улавливать больше случаев, если ваш входной URL-адрес не такой строгий, как описано выше.

0
ответ дан 2 November 2019 в 23:59
поделиться

Похоже, что самым простым решением для ваших двух конкретных примеров будет шаблон:

[^/]_//[^/]+

т.е.: не-косая черта (0 или более раз), две косые черты, не-косая черта (0 или более раз). Вы можете быть строже, если хотите, так как два существующих ответа делают это по-разному - один отклоняет, например, URL, начинающиеся с ftp:, другой отклоняет домены с подчеркиванием (но принимает URL без ведущего protocol://, таким образом, будучи даже шире моего в этом отношении). Такое разнообразие ответов (все правильные по отношению к вашим скудным спецификациям;-) должно навести вас на мысль, что ваши спецификации слишком расплывчаты и должны быть ужесточены.

0
ответ дан 2 November 2019 в 23:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: