Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.02.14;
Скачать: CL | DM;

Вниз

TRegExpr поогите составить выражение   Найти похожие ветки 

 
ford ©   (2009-12-09 11:28) [0]

Всем здравствуйте!
необходимо разбирать URL на составные части
в примере к TRegExpr есть такая строка
"(?i)(FTP|HTTP)://([_a-z\d\-]+(\.[_a-z\d\-]+)+)((/[ _a-z\d\-\\\.]+)+)*"
если её применить на строке
http://www.delphimaster.ru/cgi-bin/forum.pl?n=3
то получаем только
http://www.delphimaster.ru/cgi-bin/forum.pl
причем подстроками будут строки
http, www.delphimaster.ru,  ru, /cgi-bin/forum.pl, /forum.pl

если добавить в последние перечисление символы = и \? то строка войдет полностью

подскажите строку регулярного выражения чтобы можно было так разбить входящий URL
на подстроки:

http://www.delphimaster.ru
/cgi-bin/
forum.pl
?n=3


 
clickmaker ©   (2009-12-09 11:52) [1]

а если будет www.dom3.dom2.dom1.ru?


 
RWolf ©   (2009-12-09 11:59) [2]

и да, символ подчёркивания в доменном имени недопустим.


 
ford ©   (2009-12-09 12:03) [3]


> и да, символ подчёркивания в доменном имени недопустим.

понятно что недопустим
впрос же не втом :)

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


 
Медвежонок Пятачок ©   (2009-12-09 12:03) [4]

проще всего поэтапно.
сначала отрезать начало включая //
затем сделать сплит по /
получим список.
те элементы списка, что содержат ? или & засплиттить еще раз


 
KilkennyCat ©   (2009-12-09 12:13) [5]

а мне от этих регулярных уже жутко. с мыльным седня всю ночь мучался, а потом подумал - ну и фигня все, скоро русскоязычные домены...


 
Медвежонок Пятачок ©   (2009-12-09 12:14) [6]

либо все за один присест одним сплиттом по выражению /|\?|&|//


 
ford ©   (2009-12-09 12:17) [7]

короче вот очередной велосипед :)
два дня потерял на этот TRegExpr
и за 20 минут сделал простую функцию

Procedure ParseUrl(srcurl:String; dst:TStrings);
Var st:String;

  function extract(src:String; divider:Char):string;
  var i:Integer;
  Begin
   i:=1; result:="";
   while src[i]<>divider do
    Begin
      result:=result+src[i];
      inc(i);
    End;
  End;
Begin
If SrcUrl<>"" Then
 Begin
  if pos("/",srcurl)>0 Then st:=Extract(SrcUrl,"/")
  Else
    if pos(".",srcurl)>0 Then st:=Extract(SrcUrl,".")
   Else
     if Pos("?",srcurl)>0 Then st:=Extract(srcUrl,"?")
     Else st:=SrcUrl;
 dst.Append(st);
 delete(srcUrl,1,Length(st)+1);
 ParseUrl(srcUrl,dst);
end;
End;


 
Медвежонок Пятачок ©   (2009-12-09 12:19) [8]

ну и зря


 
Медвежонок Пятачок ©   (2009-12-09 12:22) [9]

const URL = "http://www.delphimaster.ru/cgi-bin/forum.pl?n=3";

var cList : TStrings;
begin
cList := TStringList.Create;
SplitRegExpr("//|/|\?|&",URL,cList);
ShowMessage(cList.Text);
cList.Free;
end;


 
ford ©   (2009-12-09 12:26) [10]


> Медвежонок Пятачок ©   (09.12.09 12:22) [9]

мдя.... ну млин тоже можно :)
хтоб еще тока знал что там есть такой метод :)



Страницы: 1 вся ветка

Текущий архив: 2010.02.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
15-1260264866
Гипербореец
2009-12-08 12:34
2010.02.14
Аналог Application.ProcessMessages для С#


2-1260876051
Boy4uk
2009-12-15 14:20
2010.02.14
графика


2-1260824299
andrewtitoff
2009-12-14 23:58
2010.02.14
MySQL


2-1261052520
oleg1963lora
2009-12-17 15:22
2010.02.14
Помогите создать класс


2-1260883760
Лёша
2009-12-15 16:29
2010.02.14
Turbo Pascal и файлы