ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
чтото внеземное с циклами repeat и while |

11.12.2009, 22:22
|
|
Участник форума
Регистрация: 04.06.2009
Сообщений: 176
Провел на форуме: 840493
Репутация:
0
|
|
чтото внеземное с циклами repeat и while
Здравствуйте. Есть текст(StrPage) и там с помощью регулярок ищу мыльники. Ищу и пытаюсь их добавить в мемо, но сначало проверяя на дубликаты. Делаю это вот так:
Код:
if Reg2.Exec(StrPage) then //strPage содержится html код страницы, reg2.exec проверяет его на наличие мыл
begin
repeat
for i:=0 to memo1.Lines.Count-1 do
if reg2.Match[0]<>Memo1.Lines[i] then //в reg2.Match[0] содержится мыло и если его нет в memo1
Memo1.Lines.Add(reg2.Match[0]) //то собсвтенно и добавляем это мыло в мемо1
until not Reg2.ExecNext; //переходим к следущему мылу в strPage
end;
но вместо того что Я ожидаю бесконечное добавление одних и тех же мыльников. Пытался делать и так
Код:
X := Reg2.Exec(StrPage);
while X do
begin
for i:=0 to memo1.Lines.Count-1 do
if reg2.Match[0]<>Memo1.Lines[i] then
Memo1.Lines.Add(reg2.Match[0]);
X := Reg2.ExecNext;
end;
но теперь уже просто пустота
 Почему? Помогите пожалуйста!
|
|
|

12.12.2009, 06:34
|
|
Banned
Регистрация: 03.11.2009
Сообщений: 112
Провел на форуме: 98006
Репутация:
17
|
|
он у тебя в первом коде проверяет ни равно ли мыло текушей позиции в мемо, если не равно добавляет его... и так дальше...
|
|
|

12.12.2009, 06:56
|
|
Участник форума
Регистрация: 04.06.2009
Сообщений: 176
Провел на форуме: 840493
Репутация:
0
|
|
Код:
if Reg2.Exec(StrPage) then
begin
repeat
for i:=0 to memo1.Lines.Count-1 do begin
if reg2.Match[0]<>Memo1.Lines[i] then begin
Memo1.Lines.Add(reg2.Match[0]) ;
break;
end
end;
until not Reg2.ExecNext;
end;
теперь уже снова пустота 
|
|
|

12.12.2009, 07:10
|
|
Banned
Регистрация: 03.11.2009
Сообщений: 112
Провел на форуме: 98006
Репутация:
17
|
|
ну как то так...
Код:
if Reg2.Exec(StrPage) then begin
k:=0;
repeat
for i:=0 to memo1.Lines.Count-1 do
if reg2.Match[0]<>Memo1.Lines[i] then
inc(k);
if k=memo1.Lines.Count-1 then
Memo1.Lines.Add(reg2.Match[0])
until not Reg2.ExecNext;
end;
|
|
|

12.12.2009, 12:06
|
|
Участник форума
Регистрация: 04.06.2009
Сообщений: 176
Провел на форуме: 840493
Репутация:
0
|
|
DeaD_MoroZ все равно вместо мыл получается одна пустота 
|
|
|

12.12.2009, 14:27
|
|
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме: 991929
Репутация:
395
|
|
|
|
|

12.12.2009, 16:33
|
|
Участник форума
Регистрация: 04.06.2009
Сообщений: 176
Провел на форуме: 840493
Репутация:
0
|
|
ну да, потому что если у Меня цикл как в первом посте то мыльники добавляюся
только что попробовал чтото теперь та регулярка не добавляет ничего, вот регулярка Reg2.Expression:= '[\w\d\-\.]+@[\w\d\-]+\.ru' которая выдирает мыльники
Последний раз редактировалось SultanOFF; 12.12.2009 в 16:49..
|
|
|

12.12.2009, 17:03
|
|
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме: 991929
Репутация:
395
|
|
по ссылке лень тыкнуть?
Извлечение email-адреса даже если он обрамлен служебными знаками
Пример использования регулярного выражения, извлекающего все адреса электронной почты с доменом любого уровня из произвольной строки, даже если они обрамлены любыми служебными знаками.
# Пример в PHP
$text = '"Vasiliy Ivanovitch" y@mail.org.kol.ru (*ColdplayC*) "l@mbr.uk.com" kol@kol.com serjio k <orba@kimori.org.ua>, serjio k <orba1@kimori.org.ua>';
$out = array();
preg_match_all('/[\.\-_A-Za-z0-9]+?@[\.\-A-Za-z0-9]+?[\
.A-Za-z0-9]{2,}/', $text, $out);
# $out[1] будет содержать массив email-адресов:
# y@mail.org.kol.ru
# l@mbr.uk.com
# kol@kol.com
# orba@kimori.org.ua
# orba1@kimori.org.ua
Serjio, 11.05.2007.
|
|
|

12.12.2009, 19:58
|
|
Участник форума
Регистрация: 04.06.2009
Сообщений: 176
Провел на форуме: 840493
Репутация:
0
|
|
все фуух проблему решил кажется наконец  вот таким способом:
Код:
procedure dubl;
var
SL : TStringList;
i, i2 : integer;
flag : Boolean;
begin
SL := TStringList.Create;
SL.AddStrings(form1.Memo1.Lines);
for i := form1.Memo1.Lines.Count - 1 downto 0 do
begin
flag := False;
for i2 := SL.Count - 1 downto 0 do
begin
if form1.Memo1.Lines[i] = SL.Strings[i2] then
if flag then
SL.Delete(i2)
else
flag := True;
end;
end;
form1.Memo1.Clear;
form1.Memo1.Lines.AddStrings(SL);
SL.Free;
end;
function bbo(s:string):boolean;
var i:integer;
flag:boolean;
begin
flag:=true;
for i:=0 to form1.memo1.Lines.Count do begin
if s=form1.Memo1.Lines[i] then
begin
flag:=false;
end;
if flag then begin
form1.Memo1.Lines.Add(s) ;
break;
end;
end;
end;
и использую эти процедуры и функции вот так:
Код:
if Reg2.Exec(StrPage) then begin
repeat begin
bbo(reg2.Match[0]);
dubl;
application.ProcessMessages;
end;
until not Reg2.ExecNext;
end;
ничего оригинальней не придумал, просто при каждом добавлении нового мыла содержимое мемо переносится в тстринГлист и уже оттуда свойством dublicate удаляются дубликаты ну и заново заносятся в мемо. Если у кого есть другие идеи, то пишите пожалуйста 
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|