Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
Поиск слов в тексте (delphi) |

03.06.2009, 17:01
|
|
Познающий
Регистрация: 03.02.2009
Сообщений: 32
Провел на форуме: 326183
Репутация:
18
|
|
Поиск слов в тексте (delphi)
Уважаемые знатоки помогите и на этот раз.
Везде в инете какие то накрученные слишком функции для поиска подстрок.
Я бы хотел, что нибудь типа preg_match_all как в пхп, чтобы комманда искала все возможные варианты.
Сейчас я ищу вот так:
Код:
r:='Гоша дай мне сало!';
p1:=pos('Гоша',r);
p2:=pos('мне сало',r);
p:=copy(r,p1,p2-p1); // слово 'дай' найденно
Но этот вариант не нормальн оработает, часто не хочет цеплять из страничек текст.
Помогите каким нибудь самым лёгким и прост рабочим примером поиска текста в массиве строк.
Спасиба!
Последний раз редактировалось Staratel; 03.06.2009 в 17:04..
|
|
|

03.06.2009, 17:19
|
|
Познающий
Регистрация: 31.05.2009
Сообщений: 68
Провел на форуме: 1271980
Репутация:
19
|
|
Staratel, правильно поставленный вопрос содержит в себе половину ответа.
Я не понял, тебе нужна работа с регулярками? Твой пример ни коим боком к нему не относится.
Нормально сформулируй свой вопрос, тогда тебе помогут.
|
|
|

03.06.2009, 17:47
|
|
Members of Antichat - Level 5
Регистрация: 15.06.2008
Сообщений: 941
Провел на форуме: 5111568
Репутация:
2399
|
|
Код:
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
|
|
|

03.06.2009, 18:24
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
Если тебе нужна универсальная работа с регулярками, то бери готовый модуль регулярок для делфи и не мучайся.
|
|
|

03.06.2009, 19:09
|
|
Members of Antichat - Level 5
Регистрация: 15.06.2008
Сообщений: 941
Провел на форуме: 5111568
Репутация:
2399
|
|
если то, что slesh сказал, тогда юзай готовый RegExpr:
http://regexpstudio.com/RU/TRegExpr/
|
|
|

03.06.2009, 20:47
|
|
Познающий
Регистрация: 03.02.2009
Сообщений: 32
Провел на форуме: 326183
Репутация:
18
|
|
Ребят ну всёже я только начинаю с дельфи работать, мне надо в большом тексте искать слова по маске, нуу плиииз помогите нормльно.
То, что вы скинете какой нить модуль или ссылку на мануал мне пока мало, что даст.
Заранее большое спасибо!
|
|
|

03.06.2009, 21:19
|
|
Members of Antichat - Level 5
Регистрация: 15.06.2008
Сообщений: 941
Провел на форуме: 5111568
Репутация:
2399
|
|
Код:
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;
|
|
|

03.06.2009, 23:17
|
|
Members of Antichat - Level 5
Регистрация: 15.06.2008
Сообщений: 941
Провел на форуме: 5111568
Репутация:
2399
|
|
качаешь ты етот "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 "
удачи (;
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|