【发布时间】:2020-06-04 15:38:46
【问题描述】:
我为提取用户 SC08 编写了一个简单的正则表达式。
https://regex101.com/r/L1DOzH/1/ 性能方面,走大约 1448 步真的很糟糕。
Jun 2 11:16:44 192.168.55.19 1 2020-06-02T10:16:43.721Z chisdsm@abcd.com dsm 4493 USR1278I [U@21513 sev="INFO" msg="user logged out due to inactivity" user="SC08"]
Jun 2 10:13:50 192.168.55.19 1 2020-06-02T09:13:50.297Z chisdsm@abcd.com dsm 4493 DO0426I [DA@21513 sev="INFO" msg="switch domain" admin="SC08"
Jun 2 10:13:43 192.168.55.19 1 2020-06-02T09:13:42.956Z chisdsm@abcd.com dsm 4493 DAO0267I [DA@21513 sev="INFO" msg="user logged in" admin="SC08" stime="2020-06-02 10:13:42.944" role="ALL_ADMIN" source="192.168.54.9"]
May 27 15:53:38 192.168.55.129 1 2020-05-27T14:53:37.669Z chisdsm@abcd.com dsm 4493 DAO0227I [DA@21513 sev="INFO" msg="delete file signature" user="SC08" filePath="/bin/rm"]
【问题讨论】:
-
如果您确定它们接近每行/字符串的末尾,您可以使用
.*\b(?:user="(?<user1>\w+)|admin="(?<user2>\w+))。另一个技巧:首先匹配一个空格:\s(?:user="(?<user1>\w+)|admin="(?<user2>\w+))。但是你应该记住一件事:步数并不直接意味着模式很慢。 -
试试这个:
=(?<=user=(?="(?<user1>\w+))|admin=(?="(?<user2>\w+))) -
@B001ᛦ - 我们将这些正则表达式用于大数据目的.. 所以这些小事情会对整体性能产生很大影响(蝴蝶效应)。 :(
-
感谢@WiktorStribiżew