搜索时间的正则表达式不想成为 non-greedy

Regex searching for time doesn't want to be non-greedy

我正在尝试 运行 Spiceworks 中的正则表达式通过电子邮件 headers 解析到 select 用于票证分配目的的第一个时间实例。 正则表达式本身可以工作,但它会提取所有时间实例,而不仅仅是一个。

这是正则表达式:\.*(0[1]|1[3-7]):\d\d:\d\d

我试图通过这样做在 non-greedy 中取得成功:\.*?(0[1]|1[3-7]):\d\d:\d\d 但这似乎不起作用。将问号放在量词前面并没有起到任何作用。

制作此正则表达式 non-greedy 或仅提取第一个实例的好的解决方案是什么?

谢谢,

安德鲁·N.

编辑:我试图通过正则表达式实现的是类似于“13:04:57”而不是整个日期。

示例字符串: 收到:127.0.0.1,SMTP id co5csp22954317qdb; 2015 年 5 月 6 日,星期三 13:02:22 -0700 (PDT) X-Received:127.0.0.1,SMTP id j185mr26699743oig.68.1430928141923; 2015 年 5 月 6 日,星期三 13:02:21 -0700 (PDT)

{1} 匹配前一个模式 1 次。如果您 post 样本 header 我可以测试 REGEX 以确保我得到的一切都是正确的。请尝试以下操作。

(.*(0[1]|1[3-7]):\d\d:\d\d){1}

您可以使用这个基于前瞻性的正则表达式来匹配与您的正则表达式匹配的时间的第一个实例:

/^(?:(?!(?:0[1]|1[3-7]):\d\d:\d\d).)*((?:0[1]|1[3-7]):\d\d:\d\d)/m

(?!...) 是一个否定前瞻,确保在匹配时间之前没有其他时间实例,因此只匹配第一个实例。

RegEx Demo