ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Поиск слов в тексте (delphi)
  #1  
Старый 03.06.2009, 17:01
Staratel
Познающий
Регистрация: 03.02.2009
Сообщений: 32
Провел на форуме:
326183

Репутация: 18
Smile Поиск слов в тексте (delphi)

Уважаемые знатоки помогите и на этот раз.

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

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


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

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

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


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


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

Спасиба!

Последний раз редактировалось Staratel; 03.06.2009 в 17:04..
 
Ответить с цитированием

  #2  
Старый 03.06.2009, 17:19
intNet
Познающий
Регистрация: 31.05.2009
Сообщений: 68
Провел на форуме:
1271980

Репутация: 19
По умолчанию

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

  #3  
Старый 03.06.2009, 17:47
eLWAux
Members of Antichat - Level 5
Регистрация: 15.06.2008
Сообщений: 941
Провел на форуме:
5111568

Репутация: 2399


Отправить сообщение для eLWAux с помощью ICQ
По умолчанию

Код:
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  
Старый 03.06.2009, 18:24
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

Если тебе нужна универсальная работа с регулярками, то бери готовый модуль регулярок для делфи и не мучайся.
 
Ответить с цитированием

  #5  
Старый 03.06.2009, 19:09
eLWAux
Members of Antichat - Level 5
Регистрация: 15.06.2008
Сообщений: 941
Провел на форуме:
5111568

Репутация: 2399


Отправить сообщение для eLWAux с помощью ICQ
По умолчанию

если то, что slesh сказал, тогда юзай готовый RegExpr:
http://regexpstudio.com/RU/TRegExpr/
 
Ответить с цитированием

  #6  
Старый 03.06.2009, 20:47
Staratel
Познающий
Регистрация: 03.02.2009
Сообщений: 32
Провел на форуме:
326183

Репутация: 18
По умолчанию

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


Заранее большое спасибо!
 
Ответить с цитированием

  #7  
Старый 03.06.2009, 21:19
eLWAux
Members of Antichat - Level 5
Регистрация: 15.06.2008
Сообщений: 941
Провел на форуме:
5111568

Репутация: 2399


Отправить сообщение для eLWAux с помощью ICQ
По умолчанию

Код:
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;
 
Ответить с цитированием

  #8  
Старый 03.06.2009, 23:17
eLWAux
Members of Antichat - Level 5
Регистрация: 15.06.2008
Сообщений: 941
Провел на форуме:
5111568

Репутация: 2399


Отправить сообщение для eLWAux с помощью ICQ
По умолчанию

качаешь ты етот "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 "

удачи (;
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Интересные вопросы по Delphi и не только CeHoKoC С/С++, C#, Delphi, .NET, Asm 4 20.04.2009 10:33
Перевод официальной документации Nikto 2 Kuzya Авторские статьи 2 25.03.2009 01:10
Платная рассылка Ашманова троль909 Статьи 11 22.02.2009 22:00
Assembler FAQ GlobalRave С/С++, C#, Delphi, .NET, Asm 2 15.02.2009 18:59
Поиск исходника Html Parser'a на Delphi donetsk Болталка 1 17.07.2006 13:02



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ