Поиск слов в тексте (delphi)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Staratel, 3 Jun 2009.

  1. Staratel

    Staratel Member

    Joined:
    3 Feb 2009
    Messages:
    0
    Likes Received:
    7
    Reputations:
    0
    Уважаемые знатоки помогите и на этот раз.

    Везде в инете какие то накрученные слишком функции для поиска подстрок.

    Я бы хотел, что нибудь типа preg_match_all как в пхп, чтобы комманда искала все возможные варианты.


    Сейчас я ищу вот так:

    Code:
    r:='Гоша дай мне сало!';
    
    p1:=pos('Гоша',r);
    p2:=pos('мне сало',r);
    p:=copy(r,p1,p2-p1); // слово  'дай' найденно


    Но этот вариант не нормальн оработает, часто не хочет цеплять из страничек текст.


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

    Спасиба!
     
    #1 Staratel, 3 Jun 2009
    Last edited: 3 Jun 2009
    4 people like this.
  2. intNet

    intNet Member

    Joined:
    31 May 2009
    Messages:
    29
    Likes Received:
    14
    Reputations:
    5
    Staratel, правильно поставленный вопрос содержит в себе половину ответа.
    Я не понял, тебе нужна работа с регулярками? Твой пример ни коим боком к нему не относится.
    Нормально сформулируй свой вопрос, тогда тебе помогут.
     
  3. eLWAux

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

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    Code:
    function cpos(sub,s:string):integer;
    begin
       result:=0;
       while pos(sub,s)>0 do begin
          inc(result);
          s:=copy(s,pos(sub,s)+length(sub),length(s));
       end;
    end;
    cpos('дай','Гоша дай мне дай сало!') == 2
     
  4. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Если тебе нужна универсальная работа с регулярками, то бери готовый модуль регулярок для делфи и не мучайся.
     
  5. eLWAux

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

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    если то, что slesh сказал, тогда юзай готовый RegExpr:
    http://regexpstudio.com/RU/TRegExpr/
     
  6. Staratel

    Staratel Member

    Joined:
    3 Feb 2009
    Messages:
    0
    Likes Received:
    7
    Reputations:
    0
    Ребят ну всёже я только начинаю с дельфи работать, мне надо в большом тексте искать слова по маске, нуу плиииз помогите нормльно.
    То, что вы скинете какой нить модуль или ссылку на мануал мне пока мало, что даст.


    Заранее большое спасибо!
     
  7. eLWAux

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

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    Code:
    var
    r:TRegExpr;
    begin
    r:=TRegExpr.Create;
    r.Expression:='<textarea>(.+?)<.textarea>';
    далее:

    если одно слово нужно:
    Code:
    r.Exec(Memo1.Text);
    showmessage(r.Substitute('$1') );
    если все слова:
    Code:
     if r.Exec(Memo1.Text) then
          repeat
            showmessage(RegExp.Match[1]);
          until not RegExp.ExecNext;
    
     
  8. eLWAux

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

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    качаешь ты етот "RegExpr.pas" , кидаешь в папку с проекто,
    потом в Unit1.pas подключаешь модуль:э
    uses ...,RegExpr;
    и юзаешь, как я написал.

    примерчик:
    Code:
    var
       r :TRegExpr;
       s :string;
    begin
       s := 'testing! test multi test! and some test!';
       r :=TRegExpr.Create;
       r.Expression:='test(.+?)test';
       if r.Exec(s) then
       repeat
            showmessage(RegExp.Match[1]);
       until not RegExp.ExecNext;
    
    в результате увидешЬ:
    "ing! ", " multi ", "! and some "

    удачи (;