Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Поиск слов в тексте (delphi) (https://forum.antichat.xyz/showthread.php?t=123448)

Staratel 03.06.2009 17:01

Поиск слов в тексте (delphi)
 
Уважаемые знатоки помогите и на этот раз.

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

Я бы хотел, что нибудь типа 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 "

удачи (;


Время: 08:44