我有一个生成此类条目的日志
<135>Oct 20 11:10:49 Oct 20 11:10:56.085 CRE: authid_log_card()- authid: 471178EAB6, type: M35XX info: Sam Smith (Keyholder) (card #1)
<135>Oct 20 11:17:15 Oct 20 11:17:21.913 CRE: authid_log_card()- authid: 6199559ABC, type: M22XX info: John Dawson (user #3)
<135>Oct 20 11:20:15 Oct 20 11:17:21.913 CRE: authid_log_card()- authid: 6199559ABC, type: M27XX info: Access denied
我需要找到一个能够捕获“John Dawson”和“Same Smith”这个名称的正则表达式以及没有锚点的“拒绝访问”但它终止它自己 我试过用这个
信息:\ S \ S(|信息(?):?(\ S 的)$
但是它创建了“两个捕获组”并且软件是我需要通过此日志每次都无法识别两个捕获组
知道如何更好地构建这个正则表达式吗?
谢谢
答案 0 :(得分:1)
当前正则表达式info:\s(.*?)\s\(|info:(\s.*?)$
匹配以下两种选择之一:
info:\s(.*?)\s\(
- info:
,后面跟一个空格,然后尽可能少的除了换行符之外的任何0 +字符被捕获到第1组,直到空格后跟(
info:(\s.*?)$
- 匹配info:
,然后将除了换行符之外的空格和任何0+字符捕获到第1组中,尽可能少但直到字符串结尾。您实际上可以使用一个捕获组来匹配任何0+字符,尽可能少到空格+ (
或字符串结尾
info:\s*(.*?)(?=\s*\(|$)
请参阅regex demo
<强>详情
info:
- info:
子字符串\s*
- + whitesoaces (.*?)
- 第1组:除了换行符之外的任何0 +字符,尽可能少但不包括...... (?=\s*\(|$)
- 0+空格和(
(带有\s*\(
)或(|
)字符串的结尾($
)(如果你是正在使用像Grok或文本编辑器这样的工具。)