匹配第一次出现的字符串

时间:2016-11-04 21:41:22

标签: java regex

字符串示例:Alerts will be silent from 00:00 to 05:00。正则表达式必须匹配具有以下格式nn:nn的任何序列,其中n是一个数字。没问题,[0-9]{2}:[0-9]{2}完美无缺。然而,目标是分别识别每个序列00:0005:0000:0005:00表示小时数,我需要单独识别它们的原因是因为字符串必须使用相关的小时更新。

以下正则表达式与05:00匹配:[0-9]{2}:[0-9]{2}$。但是对于第一个序列00:00,我能够使其工作的唯一方法是\s[0-9]{1,2}:[0-9]{2}\s,它匹配00:00但两端都有空格。当然这不是理想的结果,必须匹配序列而不用空格。

1 个答案:

答案 0 :(得分:1)

您的问题似乎可以通过其他方式解决,但您只提供了一些细节。

解决主要问题,主要是:

  

序列必须在没有空格的情况下匹配

请注意\s[0-9]{1,2}:[0-9]{2}\s包含\s作为消费模式的一部分。要检查空格是否存在,您应该使用 lookarounds 零宽度断言

(?<=\s)[0-9]{1,2}:[0-9]{2}(?=\s)

这里,(?<=\s)要求在前1或2位之前存在空格,但它不会消耗此空格。 (?=\s)正向前瞻要求在尾随1或2位后存在空格,并且也不消耗。

“消耗”是指匹配的子字符串不会成为返回匹配值的一部分。