2010-06-08 3 views
9

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

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

Как я могу извлечь с помощью регулярных выражений BaseUrl?

выход

Пример:

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

это выглядит так же, как домашнее задание – Gyom

+4

@Gyom Это не выглядит как домашнее задание –

ответ

8

Как это:

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); 
+0

Спасибо за ваш быстрый ответ но это дает https: // www.abc.com sadfl можно ли это только дает первый https://www.abc.com – Sunil

+0

Большое спасибо sir Это работает – Sunil

+0

+1 для класса URI. – Aistina

1

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

Это будет захватить все, что начинается с HTTP и $ 1 будет содержать все, от начала и до первого/после //

+0

Спасибо за ваше быстрое Быстродействие – Sunil

1

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

поверьте, вы будет получить укушенный в конце концов.

+0

Спасибо за комментарий – Sunil

0

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

https?://[^/]+ 

будет работать. (s? включены также обрабатывать https:)

+0

Спасибо за ваш отзыв sir – Sunil

0

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

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

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

+0

Спасибо за ваш быстрый ответ sir – Sunil

0

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

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

Спасибо за ваш быстрый ответ sir – Sunil

2

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

String baseUrl = url.substring(0, url.indexOf('/', url.indexOf("//")+2)); 
+0

:) Спасибо за ваш ответ Но я хочу использовать регулярное выражение – Sunil

Смежные вопросы