Уважаемые знатоки помогите и на этот раз. Везде в инете какие то накрученные слишком функции для поиска подстрок. Я бы хотел, что нибудь типа preg_match_all как в пхп, чтобы комманда искала все возможные варианты. Сейчас я ищу вот так: Code: r:='Гоша дай мне сало!'; p1:=pos('Гоша',r); p2:=pos('мне сало',r); p:=copy(r,p1,p2-p1); // слово 'дай' найденно Но этот вариант не нормальн оработает, часто не хочет цеплять из страничек текст. Помогите каким нибудь самым лёгким и прост рабочим примером поиска текста в массиве строк. Спасиба!
Staratel, правильно поставленный вопрос содержит в себе половину ответа. Я не понял, тебе нужна работа с регулярками? Твой пример ни коим боком к нему не относится. Нормально сформулируй свой вопрос, тогда тебе помогут.
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
Если тебе нужна универсальная работа с регулярками, то бери готовый модуль регулярок для делфи и не мучайся.
Ребят ну всёже я только начинаю с дельфи работать, мне надо в большом тексте искать слова по маске, нуу плиииз помогите нормльно. То, что вы скинете какой нить модуль или ссылку на мануал мне пока мало, что даст. Заранее большое спасибо!
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;
качаешь ты етот "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 " удачи (;