Regex: нужна альтернатива для позитивного взгляда - PullRequest
0 голосов
/ 22 января 2020

У меня есть регулярное выражение, которое ищет IP-адреса в файле журнала. Я использую позитивный взгляд за это. Я хочу получить IP-адреса в строке, которая содержит phpExecution. Мое регулярное выражение:

(?<=.*sqlExecution.*"ip":")[^"]+

Проблема в том, что используемый нами инструмент анализа журналов (graylog) не поддерживает списки. Это регулярное выражение работает в поиске VSCode и онлайн-тестерах регулярных выражений. Но в сером журнале он не работает.

есть ли альтернатива этому регулярному выражению без внешнего вида?

Пример строки журнала:

<200> Nov 16 14:36:10 phpExecution INFO: Php Execution {"ip":"33.333.333.33","workspace":"gasqazvin","timeZone":"2019-11-16 14:11:10","usrUid":"","action":"phpExecution","filename":"/var/www/html/pm/shared/sites/work/public/1244635345345/23425452.php","url":"/syswork/fa/modern/1244635345345/23425452.php?"}

Это не просто поле IP, я должен сделать это для всех полей, как workflow, timezone, .... Так что это могут быть не просто цифры.

Ответы [ 2 ]

1 голос
/ 22 января 2020

Вот решение:

\"ip\":\"([^\"]+)\".+\"action\":\"phpExecution\".+

При следующем предположении: phpExecution всегда после IP-адреса в JSON

Демо: https://regex101.com/r/6rJcia/1

Обратите внимание, что для этой работы я бы предложил использовать синтаксический анализатор JSON.

1 голос
/ 22 января 2020

Вы можете попробовать этот шаблон phpExecution.+"ip":\s*"([^"]+)

Объяснение:

phpExecution - соответствует phpExecution буквально

.+ - 1+ любых символов

"ip": - соответствует "ip": буквально

\s* - 0+ пробелов

"([^"]+) - соответствует " буквально, затем 1+ символов, другие от " и сохраните его в первой группе захвата - это будет желаемое значение

Обратите внимание, что вы можете поставить любое имя поля вместо ip.

Демо

...