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-адреса, а затем получить разницу.