Сбор данных в регулярных выражениях с помощью комбинации двойных кавычек - PullRequest
0 голосов
/ 26 сентября 2018

Для начала - я сделал несколько регулярных выражений (ни в коем случае не эксперт), но это ставит меня в тупик.

регулярное выражение: pcre (php)

Я пытаюсь получить значения из некоторых полей, содержащихся в событиях в Splunk.В частности, события из папки входящих сообщений от exchange.

Уловка заключается в том, что значения заключены в кавычки ("). Таким образом, поле" От "со значением NO выглядит примерно так:
From="". One with an actual value would look like From=""Smith, John" [SMTP:johnsmith@example.com] or From="Microsoft At Home" or From=""Systems"[[EX:/O=<organization>/OU=******/cn=Recipients/cn=******]".
Следующее поле в событии - ExceptFrom= "".

У меня есть шаблон регулярных выражений:

`(?:\bFrom=(?:")(?:"|(?:))(?P<From_fixed>((.+?))|((.+?)))(?:"))` 

такого рода работы, но он имеет много проблем, которые я должен отфильтровать позже в процессе. Кроме того, когдаданные выглядят как From = "", они захватывают следующее поле ExceptFrom = "".

Можете ли вы помочь мне найти регулярное выражение, которое получает значение между внутренним набором кавычек, если есть двойные кавычки,значение между кавычками, если есть одинарные кавычки, и не возвращать значение, если есть просто набор двойных кавычек ("").
Последняя из них полезна, так как я могу просто проигнорировать это позже,но при этом данные будут выглядеть лучше.

Они должны быть записаны в именованной группе From_fixed. Вот примеры данных, с которыми я работаю:

  1. From = "" ExceptIfFrom ="" HasAttachment = "False" - Желаемый результат = или ""
  2. From = "Предстоящие события" ExceptIfFrom = "" - Желаемый результат = Предстоящие события
  3. From = "" Смит, Джон "[SMTP: johnsmith@example.com] - Желаемые результаты = Смит, Джон
  4. From = "" Системы "[[EX: / O = / OU = ****** / cn = Получатели / cn = ******]" - Желаемые результаты = Системы

Заранее спасибо!

1 Ответ

0 голосов
/ 26 сентября 2018

Вы можете попробовать это регулярное выражение:

/(?<=From=\"\"?)(?: |[^"]+)/g

Он начинается с оглядывания назад, проверяя наличие «From =» »в начале, затем проверяет, есть ли пробел или строка в кавычках и соответствует ли это.Он возвращает пустое совпадение, если после двойных кавычек есть пробел, в противном случае он возвращает значение между кавычками. Редактировать :

Попробуйте вместо этого, я забыл о '?'квантификатор:

\b(?:From=""?(?: |([^"]+)))\b

Это регулярное выражение не использует обратный просмотр, вместо этого вы получите результат в Group 1.

Он начинается с сопоставления 'From="' с одной или двумя кавычками,с последующим пробелом или любым количеством символов, не являющихся кавычками, с захватом значения в кавычках в группе 1.

...