У меня очень простой вопрос о регулярном выражении. Предположим, у меня есть 2 условия:Очень простой вопрос в регулярном выражении
Как я могу извлечь с помощью регулярных выражений BaseUrl?
выходПример:
У меня очень простой вопрос о регулярном выражении. Предположим, у меня есть 2 условия:Очень простой вопрос в регулярном выражении
Как я могу извлечь с помощью регулярных выражений BaseUrl?
выходПример:
Как это:
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);
/^(https?\:\/\/[^\/]+).*/$1/
Это будет захватить все, что начинается с HTTP и $ 1 будет содержать все, от начала и до первого/после //
Спасибо за ваше быстрое Быстродействие – Sunil
для записи-и одноразовых-скриптов За исключением, вы должны всегда рефрена от разбора сложные синтаксисы (адреса электронной почты, URL-адреса, html-страницы и т. д.) с использованием регулярных выражений.
поверьте, вы будет получить укушенный в конце концов.
Спасибо за комментарий – Sunil
Я уверен, что есть класс Java, который позволит пути манипуляции, но если это должно быть регулярным выражением,
https?://[^/]+
будет работать. (s?
включены также обрабатывать https:
)
Спасибо за ваш отзыв sir – Sunil
Похоже, самое простое решение для ваших двух конкретных примерах будет картина:
[^/]_//[^/]+
т.е. без косой черты (0 или более раз), две косые черты, не -slash (0 или более раз). Вы можете быть более строгими, чем хотите, поскольку два существующих ответа выполняются по-разному - одни отклоняются, например, URL-адреса, начинающиеся с ftp:
, другие отклонят домены с символами подчеркивания (но принимают URL-адреса без ведущего protocol://
, тем самым в этом отношении еще шире, чем у меня). Это разнообразие ответов (все правильные ответы на ваши скудные спецификации ;-) должны предполагать, что ваши спецификации слишком расплывчаты и должны быть затянуты.
Спасибо за ваш быстрый ответ sir – Sunil
Вот регулярное выражение, которое должно удовлетворять задаче.
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 не так строго, как описано выше.
Спасибо за ваш быстрый ответ sir – Sunil
Один лайнера без регулярных выражений:
String baseUrl = url.substring(0, url.indexOf('/', url.indexOf("//")+2));
:) Спасибо за ваш ответ Но я хочу использовать регулярное выражение – Sunil
это выглядит так же, как домашнее задание – Gyom
@Gyom Это не выглядит как домашнее задание –