Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Список IP с помощью регулярного выражения 
V
    Опции темы
Serebrus
Дата 11.6.2009, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 333
Регистрация: 22.5.2007
Где: Ташкент

Репутация: нет
Всего: нет



Привет народ Винграда.
Допустим есть строка (длинная) или текст, в котором имеются IP адреса. Надо составить список IP адресов с помощью регулярного выражения.
Регулярное выражение для IP несложное: \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}

Это сообщение отредактировал(а) Serebrus - 11.6.2009, 15:09
PM MAIL   Вверх
Serebrus
Дата 11.6.2009, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 333
Регистрация: 22.5.2007
Где: Ташкент

Репутация: нет
Всего: нет



Я пробовал так:
Допустим текст такой: 2рло jkhjkhjkh 192.168.10.10 192.168.10.12 jdkfhsf рашгршр 192.168.10.2
Код

procedure GetIPList(Str, RegStr: String; LB: TListBox);
var RE: TRegExpr;
    Ulist: TStrings;
    i: Integer;
begin
RE:=TRegExpr.Create;
Ulist:=TStrings.Create;
 try
  RE.Expression := RegStr;
  RE.Split(Str, Ulist);
  for i:=1 to Ulist.Count do
    LB.Items.Add(Ulist.Strings[i-1]);
 finally
  RE.Free;
  Ulist.Free;
 end;
end;
//Вызов
GetIPList('2рло jkhjkhjkh 192.168.10.10 192.168.10.12 jdkfhsf рашгршр 192.168.10.2', '\s*[а-яА-Яa-zA-Z]{1,}\s*', Form1.IPList);
//Результат
2

192.168.10.10 192.168.10.12

192.168.10.2

В результате 5 строк, 2я и 4я строка пустая.
Мне надо:
192.168.10.10
192.168.10.12
192.168.10.2
Как исправить?

Это сообщение отредактировал(а) Serebrus - 11.6.2009, 15:13
PM MAIL   Вверх
dumb
Дата 11.6.2009, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 13
Всего: 158



пишешь регулярку для выделения адресов:
Цитата(Serebrus @  11.6.2009,  15:46 Найти цитируемый пост)
Регулярное выражение для IP несложное: \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}

а потом вызываешь с каким-то странным:
Цитата(Serebrus @  11.6.2009,  16:05 Найти цитируемый пост)
'\s*[а-яА-Яa-zA-Z]{1,}\s*'

в чем прикол?
PM MAIL   Вверх
Serebrus
Дата 11.6.2009, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 333
Регистрация: 22.5.2007
Где: Ташкент

Репутация: нет
Всего: нет



dumb, я написал регулярку для IP (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}), потому что думал, с помощью этого регулярного выражения можно найти IP. Но оказывается, можно найти а не вырезать IP.
PM MAIL   Вверх
Serebrus
Дата 11.6.2009, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 333
Регистрация: 22.5.2007
Где: Ташкент

Репутация: нет
Всего: нет



Братцы, почти удалось. Поменял \s*[а-яА-Яa-zA-Z]{1,}\s* на \s*[а-яА-Яa-zA-Z\s*]{1,}\s*.
Результат:
2
192.168.10.10
192.168.10.12
192.168.10.2


Все таки остается первая строка остается (значение: 2), но этот результат в полне удовлетворяет чем первый.

Это сообщение отредактировал(а) Serebrus - 11.6.2009, 17:29
PM MAIL   Вверх
WandG
Дата 11.6.2009, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 17.11.2008

Репутация: нет
Всего: 1



Если задача позволяет, то можно просто в лоб - брать получившийся список и оставить в нем только то, что подходит под \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
PM MAIL   Вверх
AntonN
Дата 11.6.2009, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 3
Всего: 18



Serebrus, во первых у TStrings нет конструктора (неужели после D7 появился? smile )
во вторых:
Код

procedure GetIPList(Str, RegStr: String; LB: TListBox);
var RE: TRegExpr;
    i: Integer;
begin
RE:=TRegExpr.Create;
 try
  RE.Expression:=RegStr;
  if ExecRegExpr(RegStr,Str) then 
   if RE.Exec(Str) then begin
     repeat
       LB.Items.Add( RE.Match[0] );
     until not RE.ExecNext;
  end;
 finally
  RE.Free;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 GetIPList('2er4445435 jkhjkhjkh 192.168.10.10 192.168.10.12 jdkfhsf nhsyltw! 192.168.10.2', '\b([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\b', ListBox1);
end;


Добавлено @ 23:04
еще можно над регулярочкой покорпеть, дабы выдирало именно IP, а не скушало 482.325.478.111 smile
Код

\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b


Это сообщение отредактировал(а) AntonN - 11.6.2009, 23:05


--------------------
user posted image
PM MAIL WWW   Вверх
Akella
Дата 12.6.2009, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0731 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.