Это файл журнала, содержащий строки, подобные этому
...
Mar 1 03:34:24 domain sshd[19178]: Failed password for root from 222.186.55.230 port 3005 ssh2
...
Я хотел бы поместить в массив каждую строку, где пользователь терпит неудачу, и в других строках массива, где пользователь преуспевает. Линии начинаются с xxx = сбой или преемственность до yyy = ssh2, поэтому я могу получить ip из обоих массивов:
preg_match_all("/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/", $securelogfile, $matches);
и получить разницу ip в новом массиве. Я ужасен в регулярном выражении, что я пытался просто тратить свое время.
Отвечая на мой вопрос, как это сделал @Томас Килиан. Я использую для отказа:
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 слова, считанные после "Failed or Succeed"
Это дает массивы, где я должен получить чистые IP-адреса, а затем получить разницу.
/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/
скобки: /(\/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/