Фон
Я хочу разработать программу для извлечения полей из неструктурированных данных журнала.Я использую grok
для определения регулярных выражений, которые соответствуют входной строке.В то время как я достиг части, где я идентифицирую регулярные выражения, я хочу объединить идентифицированные регулярные выражения в одно, чтобы соответствовать всей строке
Пример -
Рассмотрим строку журнала CISCO PIX-
Mar 29 2004 09:54:18: %PIX-6-302005: Built UDP connection for faddr 198.207.223.240/53337 gaddr 10.0.0.187/53 laddr 192.168.0.2/53
Для приведенного выше логина я выделяю следующие регулярные выражения -
CISCOTIMESTAMP - \b(?:Jan(?:uary|uar)?|Feb(?:ruary|ruar)?|M(?:a|ä)?r(?:ch|z)?|Apr(?:il)?|Ma(?:y|i)?|Jun(?:e|i)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|O(?:c|k)?t(?:ober)?|Nov(?:ember)?|De(?:c|z)(?:ember)?)\b +(?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9])(?: (?>\d\d){1,2})? (?!<[0-9])(?:2[0123]|[01]?[0-9]):(?:[0-5][0-9])(?::(?:(?:[0-5]?[0-9]|60)(?:[:.,][0-9]+)?))(?![0-9])
CISCOTAG - [A-Z0-9]+-(?:[+-]?(?:[0-9]+))-(?:[A-Z0-9_]+)
CISCOACTION - Built|Teardown|Deny|Denied|denied|requested|permitted|denied by ACL|discarded|est-allowed|Dropping|created|deleted
IPV4 - (?<![0-9])(?:(?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5]))(?![0-9])
URIPATH - (?:/[A-Za-z0-9$.+!*'(){},~:;=@#%_\-]*)+(?:\?[A-Za-z0-9$.+!*'|(){},~@#%&/=:;_?\-\[\]<>]*)?
Задача
Теперь я хочу merge
эти регулярные выражения вместе, но я также хочу включить в них заполнители.Пример -
Built|Teardown|Deny|Denied|denied|requested|permitted|denied by ACL|discarded|est-allowed|Dropping|created|deleted
Это регулярное выражение совпадает со словом Built
в строке журнала, а -
(?<![0-9])(?:(?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5]))(?![0-9])
идентифицирует первое 198.207.223.240
(IP Address)
.
Однако, когда я объединяю их вместе в regex101.com следующим образом -
(Built|Teardown|Deny|Denied|denied|requested|permitted|denied by ACL|discarded|est-allowed|Dropping|created|deleted) ((?<![0-9])(?:(?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5]))(?![0-9]))
Они не очень хорошо склеиваются, очевидно, потому что между ними есть слова - UDP connection for faddr
- которые я называю '
Я хочу объединить захваченные регулярные выражения при рассмотрении произвольных «заполнителей» между ними.
Есть ли способ сделать это?
Мой подход
Я пытался использовать (.*)
и (.*?)
, но они слишком мощные , то есть заменяют другие шаблоны исоответствует всей оставшейся строке.
Может кто-нибудь помочь мне в достижении желаемого результата?
Идеальный результат будет -
CISCOTIMESTAMP + [РЕЖИМ ЗАПОЛНЕНИЯ]+ CISCOTAG + [REGEX FILLER] + CISCOACTION + [REGEX FILLER] + IPv4 + URIPATH + и так далее.