Я строю какой-то базовый c синтаксический анализ журнала и не могу найти способ сделать это регулярное выражение правильным. Я хочу, чтобы каждое регулярное выражение соответствовало только одному из журналов ниже. Первый из перечисленных - это тот, который не работает, а остальные приведены в качестве примеров того, что работает.
Я предоставил образец журнала, использованное регулярное выражение и то, что он возвращает. Любая помощь будет принята с благодарностью
В этих примерах: первое регулярное выражение для сопоставления, если в журнале нет «\» или «@» до или после входа в систему. Второе регулярное выражение будет сопоставлять журналы с «\» перед входом в систему. Третье регулярное выражение будет сопоставлять журналы с «@» после входа в систему
Log:
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>[^"]+)
Возвращает:
login=bob domain=xyz.org