【问题标题】:Capturing Username out of OpenVPN logs using Regex使用正则表达式从 OpenVPN 日志中捕获用户名
【发布时间】:2019-01-16 22:27:09
【问题描述】:

我有以下正则表达式 ('([a-z]+)'|\[([a-z]+)\]),它将从以下由 OpenVPN 在 pfSense 中生成的两个日志行中捕获用户名 joebloggs。

  • openvpn[18738]: 123.123.123.123:12345 [joebloggs] 由 [AF_INET]123.123.123.123:50453 发起的对等连接
  • openvpn:用户“joebloggs”已通过身份验证

问题在于,在一种情况下,它捕获了方括号,而另一种情况下,它捕获了引号。

显然这是一种设计,以便捕获两种日志格式的字符串,但理想情况下,我只想捕获用户名,不加修饰。

捕获 pf 日志的日志系统是 Graylog2(它使用 Java Regex 匹配)——提取器只会捕获第一个 Capture Group,因此它完全封装在一个捕获组中。

【问题讨论】:

  • 试试(?<=')[a-z]+(?=')|(?<=\[)[a-z]+(?=]),或者,如果必须有一个捕获组,((?<=')[a-z]+(?=')|(?<=\[)[a-z]+(?=]))
  • 这对 Wiktor 非常有效。我显然需要研究前瞻和后视!如果您将其发布为正确答案,我会给您信用!

标签: regex


【解决方案1】:

你可以使用

(?<=')[a-z]+(?=')|(?<=\[)[a-z]+(?=])

或者,如果必须有一个捕获组,使用

((?<=')[a-z]+(?=')|(?<=\[)[a-z]+(?=]))

详情

  • (?&lt;=')[a-z]+(?=') - 1+ 个小写 ASCII 字母紧跟在 ' 字符之前和之后
  • | - 或
  • (?&lt;=\[)[a-z]+(?=]) - 1+ 个小写 ASCII 字母,前面紧跟 [,后面跟 ] 字符。

【讨论】:

  • 优秀。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-21
  • 1970-01-01
  • 2021-12-10
  • 2019-07-21
  • 2023-03-26
相关资源
最近更新 更多