regex - 使用正则表达式从 OpenVPN 日志中捕获用户名
问题描述
我有以下正则表达式,它将从OpenVPN 在 pfSense 中生成的以下两个('([a-z]+)'|\[([a-z]+)\])
日志行中捕获用户名 joebloggs 。
- openvpn[18738]: 123.123.123.123:12345 [joebloggs] 对等连接由 [AF_INET]123.123.123.123:50453 发起
- openvpn:用户 'joebloggs' 已通过身份验证
问题是在一种情况下,它捕获方括号,另一种情况下捕获引号。
显然,这是为了捕获两种日志格式的字符串而设计的,但理想情况下,我只想捕获用户名,不考虑修饰。
捕获 pf 日志的日志系统是 Graylog2(它使用 Java 正则表达式匹配)——提取器只会捕获第一个捕获组,因此它完全封装在一个捕获组中。
解决方案
您可以使用
(?<=')[a-z]+(?=')|(?<=\[)[a-z]+(?=])
或者,如果必须有一个捕获组,请使用
((?<=')[a-z]+(?=')|(?<=\[)[a-z]+(?=]))
细节
(?<=')[a-z]+(?=')
- 1+ 小写 ASCII 字母紧跟在'
字符之前和之后|
- 或者(?<=\[)[a-z]+(?=])
- 1+ 小写 ASCII 字母紧跟在字符之前[
和之后]
。
推荐阅读
- java - 如何使用@Qualifier 来识别应该使用的bean
- android - 使用 Retrofit 的动态数据的可扩展列表视图
- reactjs - 用于 React Native 的 NATS.io?
- sequelize.js - 如果日期过滤器为空或“”,则返回所有行
- neo4j - 在 gremlin 中相当于重复和直到的密码
- github - 来自 fork 的标签显示在主存储库中
- mule - Mulesoft_ 无法向多个电子邮件地址发送电子邮件
- python - 如何结束另一个线程中的while循环?
- wpf - 键入值时如何在 ComboBox.Text 上实现 IDataErrorInfo?
- swift - 当标签中的文本大于屏幕时,滚动视图不滚动