正则表达式(和函数?)匹配特定的文本

时间:2017-10-23 10:27:34

标签: regex

我有一个生成此类条目的日志

<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 的)$

但是它创建了“两个捕获组”并且软件是我需要通过此日志每次都无法识别两个捕获组

知道如何更好地构建这个正则表达式吗?

谢谢

1 个答案:

答案 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或文本编辑器这样的工具。)