具有可选结束字符的PCRE2正则表达式总是与可选结束字符匹配



我有一个PCRE2表达式,它从一些日志中读取用户名。在日志中,用户名可以选择放在括号中。我需要通过正则表达式获得用户名,当然不需要括号。

日志示例:

msg_id="1100-0005" Authentication of Firewall user [someuser@somehost] from fe80::badd:cafe was rejected, password is incorrect
msg_id="5000-0001" WebUI User anotheruser@anotherhost from 10.0.0.2 log in attempt was rejected - invalid credentials.

我想出的正则表达式(其中组3应该是用户名(:

msg_id="[0-9a-fA-F]{4}-[0-9a-fA-F]{4}"s(Authentication of)?s?(.*s[Uu]ser)s[?(S+)]?s

到目前为止,第一个日志得到someuser@somehost],第二个日志得到了anotheruser@anotherhost。有没有一种方法可以在不使用非贪婪选项的情况下去掉尾括号?

您可以使用

msg_id="[0-9a-fA-F]{4}-[0-9a-fA-F]{4}"(?:s+Authentication of)?s+(.*?s[Uu]ser)s[?([^[]s]+)

请参阅regex演示详细信息

  • msg_id="-文字字符串
  • [0-9a-fA-F]{4}-四个十六进制字符
  • --连字符
  • [0-9a-fA-F]{4}-四个十六进制字符
  • "-一个"字符
  • (?:s+Authentication of)?-一个或多个空白的可选序列,然后是Authentication of字符串
  • s+-一个或多个空白
  • (.*?s[Uu]ser)-组1:零个或多个字符(换行字符除外(,尽可能少,然后是空白和Useruser
  • s-空白
  • [?-可选的[字符
  • ([^[]s]+)-第2组:除][和空白之外的一个或多个字符

最新更新