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

0

Это файл журнала, содержащий строки, подобные этому

...
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 в новом массиве. Я ужасен в регулярном выражении, что я пытался просто тратить свое время.

  • 1
    Вам необходимо /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/ скобки: /(\ /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/
  • 0
    ну, это работает без них, но я собираюсь принять ваши уважающие правила @ThomasKilian. Любые идеи, как получить 5 слов влево и 3 слова вправо, из ip, чтобы получить что-то вроде: Не удалось пароль для root от 222.186.55.230 порт 3005 ssh2?
Показать ещё 7 комментариев
Теги:
preg-match-all

1 ответ

0
Лучший ответ

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню