正则表达式学习
分组加名称
在分组括号内,加?<名称即可>
message:Fri Jan 26 14:40:35 2024 [pid 13020] [ftptest] FAIL LOGIN: Client "::ffff:10.215.7.21"
正则表达式:
message:(?<message>(?<originEventTime>\w+\s+\w+\s+\d{1,2}\s+\d{2}:\d{2}:\d{2}\s\d{4})\s\[pid (\d+)\]\s(\[(?<user>\w+)\]\s)?(?<msg>.*))
这里(?\w+)是匹配ftptest的,增加名称就在括号前面加?,最终就会给这个分组匹配命名user
某个分组匹配存在或者不存在
在匹配的分组后面加?,表示出现0次或者1次
比如匹配内容:
message:Fri Jan 26 14:40:35 2024 [pid 13020] [ftptest] FAIL LOGIN: Client "::ffff:10.215.7.21"
message:Mon Jan 8 14:34:34 2024 [pid 24736] FTP command: Client "::ffff:10.215.7.21", "SYST"
对于[ftptest] 可能存在或者不存在
message:(?<message>(?<originEventTime>\w+\s+\w+\s+\d{1,2}\s+\d{2}:\d{2}:\d{2}\s\d{4})\s\[pid (\d+)\]\s(\[(?<user>\w+)\]\s)?(?<msg>.*))
这里使用 ([(?\w+)]\s)?, ([(?\w+)]\s)是匹配[ftptest],后面加?表示整个组匹配出现1次或者0次