Перейти к контенту

Регулярное выражение


Рекомендуемые сообщения

Подскажите пожалуйста получение из любого URL домена. Поясню:

Url может содержать Http,https

www может присутствовать, может нет

цель получить то, что после протокола(и если есть то и после www.) и до первого / (если он есть)

Пример:

_http://www.ibresource.ru/forums/index.php?showtopic=56548

должно получиться

ibresource.ru

 

Символ подчеркивания добавлен чтобы избежать BB

Изменено пользователем Kvendi
Ссылка на комментарий
Поделиться на других сайтах

Ссылка на комментарий
Поделиться на других сайтах

Ну от вас я этого не ожидал. Там есть регулярка на сам URL в find_links(), в неё нужно только добавить скобки для захвата той части URL, которая идёт после протокола и всё.

 

Можно взять такую вот регулярку, всё найдёт.

Ссылка на комментарий
Поделиться на других сайтах

Все, понял, спасибо. Просто сразу там не разобрался, для меня все что связано с регекспом большое дно) Просто надо прикрутить к одному из win32 приложений )
Ссылка на комментарий
Поделиться на других сайтах

Упорно даже не мачится ( видимо все- таки косяк в реализации самого модуля регекспа хотя вроде pcre модуль все хвалили. Лан, сделаю по старинке парсингом Изменено пользователем Kvendi
Ссылка на комментарий
Поделиться на других сайтах

Напишите что у вас вышло, посмотрю, я так понимаю C++? :D
Ссылка на комментарий
Поделиться на других сайтах

не, Delphi.

Там принцип простой объявляется строка, объявляется regexp и если эта строка мачится с регекспом, тогда можно сделать replace

Пробовал на самом деле до этого пример регулярки на эту же тему с php.net тоэе не захотела )

Сделал по свойму

function pm_GetDomain(url: AnsiString):AnsiString;
var stemp:AnsiString;
begin
stemp:=url;
if pos('://',stemp)>0 then
stemp:=Copy(stemp,pos('://',stemp)+3,Length(stemp)-pos('://',stemp)-3);
if Pos('www.',stemp)>0 then
stemp:=Copy(stemp,Pos('.',stemp)+1,Length(stemp)-pos('.',stemp)-1);
if Pos('@',stemp)>0 then
 stemp:=Copy(stemp,pos('@',stemp)+1,Length(stemp)-pos('@',stemp));
if Pos(':',stemp)>0 then
 stemp:=Copy(stemp,1,Pos(':',stemp)-1);
if Pos('/',stemp)>0 then
stemp:=Copy(stemp,1,pos('/',stemp)-1);
Exit(stemp);
end;

на самом деле далеко не уверен в том что использование регулярки было бы быстрее и менее ресурсоемко

Ссылка на комментарий
Поделиться на других сайтах

Вряд ли было бы быстрее, тем более что вы проверяете сам URL довольно орошо, мой пример был совсем простым, даже досадно :D
Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.