Помогите срегуляркой

nezabor
На сайте с 19.07.2010
Offline
152
609

задолбал спам по самые уши

и вот я решил для начала построить список замых заспамленный IP

но очень нужна помощь разбора текста

есть вот такой произвольный текст

Artuniosepe 18:02 Смотрит сообщение 'Нет доступа' /forum/showthread.php?1514-%D0%9A%D0%B0%D0%BA-%D1%81%D0%B5%D0%B3%D0%BE%D0%B4%D0%BD%D1%8F-%D0%B4%D0%B5%D0%BB%D0%B0-0-8&p=2987 Смотрит тему 195.154.215.227
DalinaSipt 17:58 Смотрит сообщение 'Нет доступа' /forum/forum.php На главной странице
Форум z1q бесплатного сайтостроения
92.100.248.236 Отправить сообщение для DalinaSipt с помощью AIM Отправить сообщение для DalinaSipt с помощью ICQ Отправить сообщение для DalinaSipt с помощью Skype™
donayh18 18:02 /forum/register.php?do=addmember&do=addmember Регистрируется 5.104.224.15
Jessicajeni 18:00 /forum/profile.php?do=editsignature Редактирует подпись 46.119.115.147 Отправить сообщение для Jessicajeni с помощью ICQ Отправить сообщение для Jessicajeni с помощью Skype™
lenusikSek 17:50 member.php?u=364 Смотрит профиль пользователя
lenusikSek
194.9.71.210 Отправить сообщение для lenusikSek с помощью ICQ

Помогите написать регулярку которая выберет IP адреса из данного мусора

Чудес не бывает...
iqmaker
На сайте с 17.04.2012
Offline
342
#1

если в linux имеем скажем имеем файл file.txt откуда надо выбрать ip, будет как то так:


grep -Po "(\d{1,3}.){3}\d{1,3}" file.txt

регулярка ip собственно в параметре у grep

nezabor
На сайте с 19.07.2010
Offline
152
#2

iqmaker, у меня вроде так должно получиться

\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}
A
На сайте с 19.07.2010
Offline
130
#3

iqmaker, nezabor, в регулярках нужно еще точку эскейпить, т.к. точка бех эскейпа обозначает любой символ, т.е. будут отбираться и такие строки 11w22q33z44

поправленные регулярки:


grep -Po "(\d{1,3}\.){3}\d{1,3}" file.txt

\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
.............
iqmaker
На сайте с 17.04.2012
Offline
342
#4

admak, угу все верно, писал из головы собственно.

nezabor, да, так тоже ок.

nezabor
На сайте с 19.07.2010
Offline
152
#5

а точнее даже вот так получилось

	$IP = explode(" ", trim($_POST['ipadreses']));
$IP = preg_grep("/^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}+$/", $IP);
siv1987
На сайте с 02.04.2009
Offline
427
#6

/\b(\d{1,3}\.){3}\d{1,3}\b/

nezabor
На сайте с 19.07.2010
Offline
152
#7
siv1987:
/\b(\d{1,3}\.){3}\d{1,3}\b/

вот это не подходит выводит буквы

и еще косяк первый вариант подходит, а вот так не работает

Пользователи, которые разместили спам:
Malscrale
IP адреса, которые были использованы для размещения спама:
195.216.213.21



---------- Добавлено 20.12.2014 в 23:18 ----------

вот так стопудово

$text_data = $_REQUEST["ipadreses"];
$regex = "/\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}/";
$IP = preg_match_all($regex, $text_data, $matches);
siv1987
На сайте с 02.04.2009
Offline
427
#8
nezabor:
вот это не подходит выводит буквы

Чего выводит? Но для захвата да оно не подходит потому что используется повторения шаблона, только для поиска совпадений. Но никакие буквы там по идее быть не должно.

A
На сайте с 09.11.2014
Offline
19
#9

Я однажды задавал такой же вопрос техподдержке. Посоветовали такую команду:

netstat -an | grep -E '\:80 '| awk '{print $5}' | grep -Eo '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' | sort | uniq -c | sort -n | tail

Делаю сайты (http://2666541.ru). Хорошо и недорого

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий