【问题标题】:Grok pattern to match email addressGrok 模式以匹配电子邮件地址
【发布时间】:2016-11-15 02:16:27
【问题描述】:

我在模式文件中定义了以下 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 DAMIEN@DAMIEN.COM > initiated Stuff: 8675309, provider: 8675309, member: 8675309

我收到编译错误是因为什么原因/这甚至会与该日志行中的电子邮件匹配吗?

谢谢,

【问题讨论】:

  • 我认为你可以使用(?<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] 匹配单词字符。
  • 这对我来说并没有失败,但它与字符串中的电子邮件地址不匹配,对你有用吗?
  • (?<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}
  • 太棒了,这些都对我有用......你能把最后一条评论变成答案,因为这解决了我的问题吗?谢谢,

标签: pattern-matching logstash-grok grok


【解决方案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}))*)

或:

(?<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},它也可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多