首页 > 解决方案 > 使用正则表达式从 OpenVPN 日志中捕获用户名

问题描述

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

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

显然,这是为了捕获两种日志格式的字符串而设计的,但理想情况下,我只想捕获用户名,不考虑修饰。

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

标签: regex

解决方案


您可以使用

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

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

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

细节

  • (?<=')[a-z]+(?=')- 1+ 小写 ASCII 字母紧跟在'字符之前和之后
  • | - 或者
  • (?<=\[)[a-z]+(?=])- 1+ 小写 ASCII 字母紧跟在字符之前[和之后]

推荐阅读