php найти строку из файла, начиная со слова xxx и заканчивая словом yyy

Это файл журнала, содержащий такие строки

...
Mar  1 03:34:24 domain sshd[19178]: Failed password for root from 222.186.55.230 port 3005 ssh2
...

Я хотел бы поместить в массив каждую строку, в которой произошел сбой пользователя, и в другие строки массива, в которых пользователь преуспел. Строки начинаются с xxx=Failed или преуспевают до yyy=ssh2, чтобы я мог получить ip из обоих массивов с помощью:

preg_match_all("/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/", $securelogfile, $matches);

и получите разницу ip в новом массиве. Я ужасен в регулярных выражениях, то, что я пытался, это просто тратить свое время.

1 ответ

Решение

Отвечая на мой вопрос как @ThomasKilian. Я использую для не удалось:

 preg_match_all("/^(\b(Failed)\b\s+)(\w+ +){4}((\d+\.){3}\d+)( +\w+){3}/", $securelogfile, $matches); 

для ошибочных строк журнала и:

 preg_match_all("/^(\b(Success)\b\s+)(\w+ +){4}((\d+\.){3}\d+)( +\w+){3}/", $securelogfile, $matches);

Имейте в виду, что первые {4} указывают на 4 слова, считая после "Сбой или успех"

Это дает массивы, где я должен получить чистые IP-адреса, а затем получить разницу.

Другие вопросы по тегам