Шаблон Grok для соответствия адресу электронной почты

У меня есть следующие шаблоны Grok, определенные в файле шаблонов

HOSTNAME \b(?:[0-9A-Za-z][0-9A-Za-z-]{0,62})(?:\.(?:[0-9A-Za-z][0-9A-Za-z-]{0,62}))*(\.?|\b)
EMAILLOCALPART [a-zA-Z][a-zA-Z0-9_.+-=:]+
EMAILADDRESS %{EMAILLOCALPART}@%{HOSTNAME}

По какой-то причине это не компилируется при запуске с http://grokdebug.herokuapp.com/ со следующими ввод, он просто возвращает "Ошибка компиляции"

Node1\Spam.log.2016-05-03   171 1540699703 03/May/2016 00:00:01 +0000  INFO  [http-bio-0.0.0.0-8001-exec-20429] EngagementServiceImpl logDefault 192.168.1.122 77777777777777777 [email protected] > initiated Stuff: 8675309, provider: 8675309, member: 8675309

Есть ли причина, по которой я получаю ошибку компиляции / будет ли это совпадать с адресом электронной почты в этой строке журнала?

Спасибо,


person A_Elric    schedule 12.07.2016    source источник
comment
Я думаю, вы можете использовать (?<email>[a-zA-Z0-9_.+=:-]+@[0-9A-Za-z][0-9A-Za-z-]{0,62}(?:\.(?:[0-9A-Za-z][0-9A-Za-z-]{0,62}))*). Понятия не имею, почему это не удается, но +-= определенно неправильный шаблон, - не должен быть оператором диапазона (должен быть экранирован или помещен в конец класса char). Кроме того, вам не нужно \b в результирующем регулярном выражении, поскольку @ не является символом слова, а [0-9A-Za-z] соответствует слову char.   -  person Wiktor Stribiżew    schedule 12.07.2016
comment
Для меня это нормально, но это не соответствует адресу электронной почты в строке, это работает для вас?   -  person A_Elric    schedule 12.07.2016
comment
(?<email>[a-zA-Z0-9_.+=:-]+@[0-9A-Za-z][0-9A-Za-z-]{0,62}(?:\.(?:[0-9A-Za-z][0-9A-Za-z-]{0,62}))*)(?<email>[\w.+=:-]+@[0-9A-Za-z][0-9A-Za-z-]{0,62}(?:[.](?:[0-9A-Za-z][0-9A-Za-z-]{0,62}))*)) работает по адресу grokdebug.herokuapp.com. Кстати, github.com/rgevaert/grok-patterns/blob/ master / grok.d / по-другому определяет шаблон электронной почты: EMAILADDRESS %{EMAILADDRESSPART:local}@%{EMAILADDRESSPART:remote}   -  person Wiktor Stribiżew    schedule 12.07.2016
comment
Замечательно, все это сработало для меня ... можете ли вы превратить этот последний комментарий в ответ, поскольку он решил мой вопрос? Спасибо,   -  person A_Elric    schedule 12.07.2016


Ответы (1)


Вы можете использовать

(?<email>[a-zA-Z0-9_.+=:-]+@[0-9A-Za-z][0-9A-Za-z-]{0,62}(?:\.(?:[0-9A-Za-z][0-‌​9A-Za-z-]{0,62}))*)

or:

(?<email>[\w.+=:-]+@[0-9A-Za-z][0-9A-Za-z-]{0,62}(?:[.](?:[0-9A-Za-z][0-9A-Za-z‌​-]{0,62}))*)

Они работают на grokdebug.herokuapp.com. Кстати, https://github.com/rgevaert/grok-patterns/blob/master/grok.d/postfix_patterns определяют шаблон электронной почты по-разному: EMAILADDRESS %{EMAILADDRESSPART:local}@%{EMAILADDRESSPART:remote}, он также может работать.

person Wiktor Stribiżew    schedule 12.07.2016