使用正则表达式匹配时间间隔

时间:2013-07-17 00:25:53

标签: php regex

我在如何preg_match这个时间陈述方面遇到了问题。

TF 02:30 pm-04:00 am

我能够将时间分隔到数组中,但我还希望得到AMPM以及字母TF。 这是我正在进行的课程安排模块。我从数据库中获得的数据是该字符串。我想将它们分开,以便我可以操作我所拥有的日历的条目。

这就是我现在所拥有的。

$sampleString = 'T 02:30 pm-04:00 am';
$pattern = '/([0-1]?\d|2[0-9]):([0-5]?\d)/';
preg_match_all($pattern,$sampleString,$time);

print_r($time);

输出:

Array ( 
    [0] => Array ( 
          [0] => 02:30 
          [1] => 04:00 ) 
    [1] => Array ( 
          [0] => 02 
          [1] => 04 ) 
    [2] => Array ( 
          [0] => 30 
          [1] => 00 ) 
) 

感谢。

1 个答案:

答案 0 :(得分:1)

根据IMSoP的建议,将其拆分为部分会更容易(再次看,我认为您的小时正则表达式可以使用改进,因为它将接受0-29的小时数,我已将其更改为0?[1-9]|1[0-2]相反,只接受1 - 12)

  • 天:[MTWHFS]+
  • 空间:\s
  • 小时:0?[1-9]|1[0-2]
  • 冒号::
  • 分钟:[0-5]?\d
  • 空间:\s
  • am / pm:[ap]m
  • 连字符:-
  • 小时:0?[1-9]|1[0-2]
  • 冒号::
  • 分钟:[0-5]?\d
  • 空间:\s
  • am / pm:[ap]m

然后将它们放在一起,用括号围绕所需的捕获组:

([MTWHFS]+)\s(0?[1-9]|1[0-2]):([0-5]?\d)\s([pa]m)-(0?[1-9]|1[0-2]):([0-5]?\d)\s([pa]m)