создать единственное регулярное выражение, которое создает групповые совпадения для dest_ip и dest_port - PullRequest
1 голос
/ 19 марта 2019

В настоящее время я работаю над вызовами регулярных выражений / Splunk для своей работы.Задача состоит в создании одного регулярного выражения, которое создает групповые совпадения для dest_ip и dest_port из этого примера файла журнала.

> Jan 15 15:16:11 10.0.5.9 Jan 15 15:16:11 ff:ff:00:01 nfc_id=20067 exp_ip=10.0.5.25 input_snmp=2 output_snmp=7 protocol=17 src_ip=43.152.96.179 src_host="unknown" src_port=1049 dest_ip=40.169.38.123 dest_host=unknown dest_port=137 tcp_flag=...... packets_in=131 bytes_in=22078 src_tos=0 dest_tos=0 src_asn=65535 dest_asn=65535 flow_count=1 percent_of_total=10.626 flow_smpl_id=2 t_int=30015  =24520

Это регулярное выражение, которое я создал, но, похоже, оно не является правильным.Регулярное выражение должно извлекать поля dest_ip и dest_port

^"(?P<dest_ip>.+?)","(?P<dest_port>.+?)"

Может ли кто-нибудь указать мне правильное направление или отправить некоторые документы, которые могут дать мне примеры.

1 Ответ

0 голосов
/ 19 марта 2019

В вашем текущем шаблоне вы используете именованные группы захвата, но вы не учитываете имена dest_ip и dest_port сами по себе.

Обратите внимание, что ^ подтверждает начало строки и что ваши примеры данных не содержат ",", который вы используете в своем шаблоне.

Вы можете использовать \S+ для сопоставления непробельных символов после знака равенства и совпадения без жадного пути .*? между ними для получения именованных групп захвата для dest_ip: и dest_port:

\bdest_ip=(?P<dest_ip>\S+).*?\bdest_port=(?P<dest_port>\S+)

Объяснение

  • \bdest_ip= Подбирайте буквально и используйте границу слова, чтобы dest_ip не был частью большого слова
  • (?P<dest_ip>\S+) Именованная группа захвата dest_ip, которая захватывает соответствующие 1+ раз непробельные символы
  • .*? Соответствует любому символу кроме символа новой строки 0+ раз без жадности
  • \bdest_port= Соответствуйте буквально и используйте границу слова, чтобы dest_port = не был частью большего слова
  • (?P<dest_port>\S+) Именованная группа захвата dest_port, которая захватывает соответствующие 1+ раз непробельных символов

Regex demo

...