使用Regex

时间:2019-01-09 23:19:41

标签: regex

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

  • openvpn [18738]:123.123.123.123:12345 [joebloggs]通过[AF_INET] 123.123.123.123:50453启动的对等连接
  • openvpn:用户'joebloggs'已通过身份验证

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

很明显,这是设计使然的 ,以便捕获两种日志格式的字符串,但理想情况下,我只想捕获用户名,无须穿衣。

捕获pf日志的日志系统是Graylog2(使用Java Regex匹配)-提取程序将仅捕获第一个捕获组,因此为什么将其完全封装在其中。

1 个答案:

答案 0 :(得分:1)

您可以使用

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

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

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

详细信息

  • (?<=')[a-z]+(?=')-1个小写ASCII字母紧跟'字符
  • |-或
  • (?<=\[)[a-z]+(?=])-1个以上的小写ASCII字母,其前面紧跟[,之后紧跟]个字符。