1

我在如何 preg_match 这个时间语句上遇到问题。

TF 02:30 pm-04:00 am

我能够将时间分成数组,但我也想得到AMandPM以及字母Tand F。这是针对我正在研究的课程表模块。我从数据库中得到的数据就是那个字符串。我想将它们分开,以便我可以操作我拥有的日历条目。

这就是我目前所拥有的。

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

谢谢。

4

1 回答 1

1

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

  • 天:[MTWHFS]+
  • 空间:\s
  • 小时:0?[1-9]|1[0-2]
  • 冒号::
  • 分钟:[0-5]?\d
  • 空间:\s
  • 上午下午:[ap]m
  • 连字符:-
  • 小时:0?[1-9]|1[0-2]
  • 冒号::
  • 分钟:[0-5]?\d
  • 空间:\s
  • 上午下午:[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)
于 2013-07-17T00:47:39.573 回答