PDA

Просмотр полной версии : Поиск слов в тексте (delphi)


Staratel
03.06.2009, 17:01
Уважаемые знатоки помогите и на этот раз.

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

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


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

r:='Гоша дай мне сало!';

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

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


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

Спасиба!

intNet
03.06.2009, 17:19
Staratel, правильно поставленный вопрос содержит в себе половину ответа.
Я не понял, тебе нужна работа с регулярками? Твой пример ни коим боком к нему не относится.
Нормально сформулируй свой вопрос, тогда тебе помогут.

eLWAux
03.06.2009, 17:47
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

slesh
03.06.2009, 18:24
Если тебе нужна универсальная работа с регулярками, то бери готовый модуль регулярок для делфи и не мучайся.

eLWAux
03.06.2009, 19:09
если то, что slesh сказал, тогда юзай готовый RegExpr:
http://regexpstudio.com/RU/TRegExpr/

Staratel
03.06.2009, 20:47
Ребят ну всёже я только начинаю с дельфи работать, мне надо в большом тексте искать слова по маске, нуу плиииз помогите нормльно.
То, что вы скинете какой нить модуль или ссылку на мануал мне пока мало, что даст.


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

eLWAux
03.06.2009, 21:19
var
r:TRegExpr;
begin
r:=TRegExpr.Create;
r.Expression:='<textarea>(.+?)<.textarea>';
далее:

если одно слово нужно:
r.Exec(Memo1.Text);
showmessage(r.Substitute('$1') );

если все слова:
if r.Exec(Memo1.Text) then
repeat
showmessage(RegExp.Match[1]);
until not RegExp.ExecNext;

eLWAux
03.06.2009, 23:17
качаешь ты етот "RegExpr.pas" , кидаешь в папку с проекто,
потом в Unit1.pas подключаешь модуль:э
uses ...,RegExpr;
и юзаешь, как я написал.

примерчик:

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 "

удачи (;