【发布时间】: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