【问题标题】:Regex to capture first match of everything between two colons正则表达式捕获两个冒号之间所有内容的第一个匹配项
【发布时间】:2020-03-24 10:54:24
【问题描述】:

给定这个字符串:

Equinox: *spamReceiveTask: Mar 17 12:34:39.264: #CAPWAP-3-DTLS_CONN_ERR: capwap_ac.c:934 00:3a:9a:30:f5:90: DTLS connection not found forAP 192.168.99.74 (43456), Controller: 192.168.99.2 (5246) send packet

我想匹配 Equinox: 和下一个冒号之间的所有内容。所以我的匹配应该是 *spamReceiveTask

我试过这个: ^.*\bEquinox:([^:]+):

但它匹配为Equinox: *spamReceiveTask:

我也尝试了前后查看选项,但它匹配了字符串中所有分号之间的所有内容。我只想匹配前两个冒号之间的所有字符,排除冒号。

【问题讨论】:

  • 您使用什么语言/工具?来自regex tag info:“由于正则表达式尚未完全标准化,所有带有此标签的问题还应包含一个指定适用的编程语言或工具的标签。”

标签: regex


【解决方案1】:

通过使用lookbehind和lookahead断言,请您尝试一下:

(?<=Equinox:)[^:]+(?=:)

【讨论】:

    【解决方案2】:

    您的正则表达式非常好,并且可以正常工作。我想问题出在特定于语言的正则表达式实用程序中,并且您可能以错误的方式使用它们;您想要的输出在捕获组 1 中;

    检查下面用javascript编写的sn-p,并在您的模式中使用match()

    let sample = `Equinox: *spamReceiveTask: Mar 17 12:34:39.264: #CAPWAP-3-DTLS_CONN_ERR: capwap_ac.c:934 00:3a:9a:30:f5:90: DTLS connection not found forAP 192.168.99.74 (43456), Controller: 192.168.99.2 (5246) send packet`;
    
    //only the first complete match and its related capturing groups are returned as an array
    let pattern = /^.*\bEquinox:([^:]+):/
    let matchAndCaptureGroup = sample.match(pattern);
    let captureGroup = matchAndCaptureGroup[1];
    console.log("without global flag: ", captureGroup);
    
    //------------------------------------------
    //with global flag, capturing group is not return
    //only the matched strings will return
    pattern = /^.*\bEquinox:([^:]+):/g
    let matchOnly = sample.match(pattern)[0];
    console.log("with global flag: ", matchOnly);

    【讨论】:

    • 我在 Graylog 中使用正则表达式作为正则表达式提取器的一部分。据我了解,Graylog 正则表达式使用 Java 模式。如果我把它放在一个 grok 模式中,似乎标准的正则表达式可以工作,但是如果我尝试创建一个正则表达式提取器,它需要 Java 模式版本。我尝试了您的 /^.*\bEquinox:([^:]+):/g 模式,但它返回不匹配。
    • @WilliamK 那不是“我的”老兄,如果你仔细看,我会复制粘贴你在问题中提供的模式,没有变化。那些/ / 是定义正则表达式模式的javascript 方式。如果是 Java,那么您唯一需要做的就是找到如何使用 graylog 捕获组
    • 我的错。对我来说都是希腊语。我不是程序员,只是想完成一项任务。我感谢您的帮助。我能够让它作为一种不同类型的提取器工作。不确定 Graylog 如何在后台解析事物。我能够在我正在创建的提取器类型中获得 tshiono 的答案。
    猜你喜欢
    • 2018-09-02
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    • 2016-10-22
    • 1970-01-01
    • 2014-06-26
    相关资源
    最近更新 更多