RegExpr и не одно значение

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by petryxa-mixa, 7 Jan 2011.

  1. petryxa-mixa

    petryxa-mixa Member

    Joined:
    8 Jun 2010
    Messages:
    174
    Likes Received:
    7
    Reputations:
    0
    как записать данные в файл найденные по средствам
    TRegExpr
    дело в том что текст перед скобкой и после 'test(.+?)test'; повторяется на странице несколько раз(много раз)
    записать нужно каждое значение на строчке
    пугает то что текст перед и после скобки повторяется много раз
    кто нить что нить подскажет?
     
  2. HakaR

    HakaR Active Member

    Joined:
    23 Jul 2009
    Messages:
    301
    Likes Received:
    200
    Reputations:
    3
    Я опять тебя ни*** не понял, но тебе наверно нужно удалять значение, которое спарсил, что бы оно больше не попадалось.
     
    #2 HakaR, 7 Jan 2011
    Last edited by a moderator: 8 Jan 2011
  3. D4mp

    D4mp Banned

    Joined:
    28 Jul 2010
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    Аналогично... думаю для того чтобы решить твою проблему, нужно конкретно задать вопрос... либо ты прочитать не можешь, либо записать... Либо хз что... =)
     
  4. petryxa-mixa

    petryxa-mixa Member

    Joined:
    8 Jun 2010
    Messages:
    174
    Likes Received:
    7
    Reputations:
    0
    Есть на странице вот такие ссылки
    сайт/страница.пхп?переменная=Значение0&
    сайт/страница.пхп?переменная=Значение1&
    сайт/страница.пхп?переменная=Значение2&
    и т.д..................
    Мне нужно спарсить Значение0,Значение1,Значение2 и т.д.
    Делать это нужно как я понимаю RegExpr так как Pos неудобно потому что мы не знаем длину "значения".
    Вопрос как мне это сделать на странице же не одно "сайт/страница.пхп?переменная=" и "amp;" их много
    ну и собственно как это дело всё лучше записать "значение" на строчке отдельной.

    Надеюсь понятнее выразил суть вопроса
    Извиняюсь за худую конкретику в моих вопросах
    Впредь буду стараться более лучше раскладывать всё по полочкам.
     
  5. D4mp

    D4mp Banned

    Joined:
    28 Jul 2010
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    В RegExp используй ExecNext(). К примеру вот так (с++)
    Code:
      r->Expression="регулярка";
    
            if(r->Exec(result))
                    {
                      do{
                       AnsiString temp=r->Match[1];
                ... делаем что хотим с нашими данными...
                    }
                    while(r->ExecNext());
    
     
  6. InfectedM

    InfectedM Elder - Старейшина

    Joined:
    4 Nov 2007
    Messages:
    155
    Likes Received:
    12
    Reputations:
    0
    RegExp.Expression := 'сайт/страница.пхп\?переменная=(.+?)&';
    if RegExp.Exec(tmp.text) then begin
    repeat
    str:=RegExp.Match[1];
    memo2.Lines.Add(str);
    until not RegExp.ExecNext;
    end ;



    опаздал(
     
  7. petryxa-mixa

    petryxa-mixa Member

    Joined:
    8 Jun 2010
    Messages:
    174
    Likes Received:
    7
    Reputations:
    0
    непонял,что вот это такое "tmp.text"?
     
  8. D4mp

    D4mp Banned

    Joined:
    28 Jul 2010
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    Там тело страницы должно быть =) Т.е. той страницы которую ты и потрошишь
     
  9. petryxa-mixa

    petryxa-mixa Member

    Joined:
    8 Jun 2010
    Messages:
    174
    Likes Received:
    7
    Reputations:
    0
    ну корочь переменная с телом страницы?
    я что то подобное подумал
     
  10. petryxa-mixa

    petryxa-mixa Member

    Joined:
    8 Jun 2010
    Messages:
    174
    Likes Received:
    7
    Reputations:
    0
    подчёркивает вот это
    showmessage(RegExp.Match[1]);
    until not RegExp.ExecNext;
    а вернее RegExp.Match и вот RegExp.ExecNext
    выдаёт ошибку что мол они не определены
    в uses RegExpr подключён
    Что не так?
    вот весь код если нужно
    Code:
    
    Form13: TForm13;
    r :TRegExpr; 
    s :string; 
    implementation 
    {$R *.dfm} 
    procedure TForm13.Button1Click(Sender: TObject); 
    begin s :=IdHTTP1.Get('http://'+Edit1.Text+'/papka/list.php?'); 
    r :=TRegExpr.Create; 
    r.Expression:='"../papka/list.php?uz=(.+?)&"'; 
    if r.Exec(s) then 
    repeat 
    showmessage(RegExp.Match[1]); 
    until not RegExp.ExecNext; 
    end;
    
    
     
  11. CheatXX

    CheatXX New Member

    Joined:
    8 Jun 2009
    Messages:
    154
    Likes Received:
    2
    Reputations:
    0
    а зачем ето нужно? (.+?)
     
  12. 1n0y

    1n0y Active Member

    Joined:
    9 May 2009
    Messages:
    276
    Likes Received:
    282
    Reputations:
    2
    не ебисебемозги с регулярками, юзай пос и делит: копируй циклом с "сайт/страница.пхп?переменная=" и удаляй из скопированного после "&". что сложного-то?
     
  13. InfectedM

    InfectedM Elder - Старейшина

    Joined:
    4 Nov 2007
    Messages:
    155
    Likes Received:
    12
    Reputations:
    0
    r.Expression:='"\.\./papka/list\.php\?uz=(.+?)&"';


    и попробуй так:
    qwe:=RegExp.Match[1];
    showmessage(qwe);
    хз но у меня только так выводит почему-то.


    var
    s,str:string;
    i:integer;
    begin
    s:='"../papka/list.php?uz=значение&"';
    i:=pos('../papka/list.php?uz=',s)+length('../papka/list.php?uz=');
    while s<>'&' do begin str:=str+s;inc(i); end;
    memo1.text:=str;
    end;
     
    #13 InfectedM, 8 Jan 2011
    Last edited: 8 Jan 2011
  14. petryxa-mixa

    petryxa-mixa Member

    Joined:
    8 Jun 2010
    Messages:
    174
    Likes Received:
    7
    Reputations:
    0
    Code:
    
    var
    s,str:string;
    i:integer;
    begin
     s :=IdHTTP1.Get('http://saitt/katalog/list.php?start=30&');
     i:=pos('../papka/id.php?u=',s)+length('../papka/id.php?u=');
     while s[i]<>'&' do
     begin
     str:=str+s[i];
     inc(i);
     end;
     memo1.lines.Add(str);
    end;
    
    в мемо только первое значение после первой вот такой ссылки "'../papka/id.php?u=''"

    вот такое
    Memo1
    OlegLom
    OlegLom
    OlegLom
    OlegLom
    OlegLom


    как этого исправить?
    а мне нужно чтоб не одно первое а все с таким значением

    объясняю еще
    у меня вот такая страница:
    Code:
    <./papka/id.php?u=name>eame</a>
    
    <./papka/id.php?u=name1>tane1</a>
    
    <./papka/id.php?u=name2>pame2</a>
    
    <./papka/id.php?u=name3>mame3</a>
    
    <./papka/id.php?u=name4>Mame4</a>
    
    <./papka/id.php?u=name5>jame5</a>
    
    <./papka/id.php?u=name6>qame6</a>
    
    Нажимаю на бутон идёт загрузка указанной мной страницы
    После чего идёт парсинг этой страницы
    и в мемо я вижу
    Memo1
    name
    name1
    name2
    name3
    name4
    name5
    name6

    Вот как то так
    подскажите пжл как реализовать?
     
  15. InfectedM

    InfectedM Elder - Старейшина

    Joined:
    4 Nov 2007
    Messages:
    155
    Likes Received:
    12
    Reputations:
    0


    10 символов
     
    1 person likes this.
  16. GlooK

    GlooK Elder - Старейшина

    Joined:
    20 Apr 2007
    Messages:
    172
    Likes Received:
    53
    Reputations:
    10
    Так правильней:
    Code:
    
    Form13: TForm13;
    r :TRegExpr; 
    s :string; 
    implementation 
    {$R *.dfm} 
    procedure TForm13.Button1Click(Sender: TObject); 
    begin s :=IdHTTP1.Get('http://'+Edit1.Text+'/papka/list.php?'); 
    r :=TRegExpr.Create; 
    r.Expression:='"../papka/list.php?uz=(.+?)&amp;"'; 
    if r.Exec(s) then 
    repeat 
    showmessage([B]r.Match[1][/B]); 
    until not [B]r.ExecNext[/B]; 
    end;
    
    
     
  17. Jakeroid

    Jakeroid Member

    Joined:
    9 May 2009
    Messages:
    199
    Likes Received:
    12
    Reputations:
    1
    Регулярки удобней и намного проще(после того как выучишь), чем ебатория с циклами и прочим.