Главная страница
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.01 c
15-1260088479
Clone
2009-12-06 11:34
2010.02.14
хп на ноут


2-1260723444
Дмитрий
2009-12-13 19:57
2010.02.14
Отображение информации из базы данных


15-1260262525
tesseract
2009-12-08 11:55
2010.02.14
Узнай сколько ты должен родной стране (ток РФ) :-)


15-1260031551
AntonioBanderas
2009-12-05 19:45
2010.02.14
Книги


2-1260663047
inkakas
2009-12-13 03:10
2010.02.14
использование png и canvas