Просмотр полной версии : Поиск слов в тексте (delphi)
Staratel
03.06.2009, 17:01
Уважаемые знатоки помогите и на этот раз.
Везде в инете какие то накрученные слишком функции для поиска подстрок.
Я бы хотел, что нибудь типа preg_match_all как в пхп, чтобы комманда искала все возможные варианты.
Сейчас я ищу вот так:
r:='Гоша дай мне сало!';
p1:=pos('Гоша',r);
p2:=pos('мне сало',r);
p:=copy(r,p1,p2-p1); // слово 'дай' найденно
Но этот вариант не нормальн оработает, часто не хочет цеплять из страничек текст.
Помогите каким нибудь самым лёгким и прост рабочим примером поиска текста в массиве строк.
Спасиба!
Staratel, правильно поставленный вопрос содержит в себе половину ответа.
Я не понял, тебе нужна работа с регулярками? Твой пример ни коим боком к нему не относится.
Нормально сформулируй свой вопрос, тогда тебе помогут.
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 сказал, тогда юзай готовый RegExpr:
http://regexpstudio.com/RU/TRegExpr/
Staratel
03.06.2009, 20:47
Ребят ну всёже я только начинаю с дельфи работать, мне надо в большом тексте искать слова по маске, нуу плиииз помогите нормльно.
То, что вы скинете какой нить модуль или ссылку на мануал мне пока мало, что даст.
Заранее большое спасибо!
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;
качаешь ты етот "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 "
удачи (;
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot