Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > RegExpr определить URL в cтроке


Автор: 1Andrey1 20.4.2008, 16:37
Ну, в общем, задача такая: есть строка в которой может быть интернет ссылка, а может и не быть. может быть ссылка и какойнибудь текст. Так вот как бы при помощи RegExpr определить строки в которых есть только одна ссылка? то есть если в строке кроме ссылки какой нибудь текст она не нужна и если ссылок несколько они тоже не нужны.

Автор: MetalFan 20.4.2008, 16:44
приведи конкретные примеры строк

Автор: 1Andrey1 20.4.2008, 16:56
Конкретных примеров не приведу... вот почему. Я делаю программу которая сортирует музыку на основе тегов. В общем расписывать долго, если комуто интересно, то вот тема на http://viaccessfree.biz/forum/showthread.php?t=28366 о моей программе. А строки о которых я спрашивал - это теги песен, просто часто всякие несознательные товарищи заполняют их ссылками(ну там на свой сайт например) естественно на весь альбом эти теги-ссылки получаются одинаковые и программа их обрабатывает не совсем правильно. Вот поэтому и хотелось бы как нибудь их обнаруживать. А почему только если одна ссылка? Потому что так же часто бывают теги в виде "D.I.P project - где ты[www.mp3-online.com.ua]"

Автор: source777 20.4.2008, 17:06
21Andrey1 Лови мой вариант:
^(https?://)?([a-z0-9-]+[a-z0-9]\.)*[a-z]{2,6}(:[0-9]+)?(/[_a-z0-9.%]*)*(\?(&?[a-z0-9%]+=[a-z0-9%]*)*)?(#[a-z]+)?$

P.S. Он подходит для широкого класса URL, в том числе и с get-параметрами и якорями, при желании можно урезать этот диапазон...

Автор: 1Andrey1 20.4.2008, 17:15
source777, спасибо конечно, но это не совсем то что я хотел. Я так понял твое выражение ищет ссылки вида "http:\\........", а мне бы "www. ....." и самое главное как определить что ничего кроме ссылки нет?

Автор: source777 20.4.2008, 18:04
Цитата(1Andrey1 @  20.4.2008,  17:15 Найти цитируемый пост)
Я так понял твое выражение ищет ссылки вида "http:\\........", а мне бы "www. ....." и самое главное как определить что ничего кроме ссылки нет? 
Нет, ты не правильно понял. Это выражение подойдёт для любого URL и для "www. ....." в том числе, приэтом оно требует, чтобы кроме URL в строке ничего не было!!!

Автор: 1Andrey1 20.4.2008, 19:30
чтото не пойму как его применить? что я делаю не так?

Код


const
  URL = ' ^(https?://)?([a-z0-9-]+[a-z0-9]\.)*[a-z]{2,6}(:[0-9]+)?(/[_a-z0-9.%]*)*(\?(&?[a-z0-9%]+=[a-z0-9%]*)*)?(#[a-z]+)?$';

......................................

RegExpr.Expression := URL;
if RegExpr.Exec (tag.artist)then
if RegExpr.Match [0]<>'' then
        begin
          showmessage('найден URL:'+#13+tag.artist+' - '+tag.title);
          result:=RegExpr.Match [0];
          exit;
        end;




Автор: source777 20.4.2008, 20:57
А с какого перепугу ты пробел в начало регулярки добавил? ведь это коренным образом извращает весь её смысл...

Автор: 1Andrey1 20.4.2008, 22:07
блин, точно smile наверное так скопировал... 
source777, спасибо большое все работает как надо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)