正则表达式“不包含”

时间:2020-03-20 17:00:26

标签: regex regex-lookarounds

我正在构建一些基本的日志解析,无法找到一种正确使用此正则表达式的方法。我希望每个正则表达式仅匹配以下日志之一。列出的第一个是不起作用的,另一个是作为正在起作用的示例的。

我提供了一个示例日志,使用的正则表达式及其返回的内容。任何帮助将不胜感激

在这些示例中: 如果日志在登录之前或之后不包含“ \”或“ @”,则匹配的第一个正则表达式。 第二个正则表达式将在登录前用“ \”匹配日志 登录后,第三个正则表达式将日志匹配为“ @”

日志:

HCE

正则表达式:

04:52:59,1,"bob"theRestOfTheLog

没有匹配项,希望它返回:

[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2},[0-9]{1,3},"(^(?!.*?\\|.*?@)<login>[^"])

日志:

login=bob

正则表达式:

04:52:59,1,"abc\bob"theRestOfTheLog

返回:

[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2},[0-9]{1,3},"(?<domain>[^\\]+)\\(?<login>[^"]+)

日志:

domain=abc login=bob

正则表达式:

04:52:59,1,"bob@xyz.org"theRestOfTheLog

返回:

[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2},[0-9]{1,3},"(?<login>[^@]+)@(?<domain>[^"]+)

1 个答案:

答案 0 :(得分:2)

我认为对于第一个正则表达式,您可以使用排除匹配\@作为登录名,以使其成为唯一匹配项,而不匹配其他匹配项。

[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2},[0-9]{1,3},"(?<login>[^"\\@]+)"

XML Namespaces

请注意,使用Regex demo [^"\\@]时还将匹配换行符。如果您不想匹配它们,可以将其扩展到[^"\\@\r\n]

如果您不想允许换行符或空格,请使用\s代替\r\n