preg_match没有按预期工作

时间:2015-09-09 10:40:02

标签: php regex preg-match

我正在使用PHPExcel处理从Excel文件加载的某些数据。每个领域的一切都运转良好,但我在一个应该包含模式的领域遇到了一些麻烦。

模式是

(([0-2]?[0-9]\:[0-5]?[0-9]\:([0-5]?[0-9])\/([0-2]?[0-9]\:[0-5]?[0-9]\:([0-5]?[0-9])))\s?)*

应检查时间间隔,如" 00:30:45/01:40:12 01:10:3​​4/1:07:12"等等。

我的问题是preg_match无法针对sting" 1:00"检查此模式。如果我添加一个变量来存储匹配,则返回一个元素数组,其值为""。

我使用在线工具(http://regexpal.com/)检查模式并按预期工作,但由于我未知的原因,preg_match没有。

我有什么遗失的吗?

2 个答案:

答案 0 :(得分:0)

试试这个

<?php
$string = "00:30:45/01:40:12 01:10:34/1:07:12";

preg_match_all('!((\d{1,2}:\d{1,2}:\d{1,2}/(\d{1,2}:\d{1,2}:(\d{1,2}))))\s?!', $string, $matches);

echo "<pre>";
print_r($matches);
echo "</pre>";

你需要得到这个:

array (
  0 => 
  array (
    0 => '00:30:45/01:40:12 ',
    1 => '01:10:34/1:07:12',
  ),
  1 => 
  array (
    0 => '00:30:45/01:40:12',
    1 => '01:10:34/1:07:12',
  ),
  2 => 
  array (
    0 => '00:30:45/01:40:12',
    1 => '01:10:34/1:07:12',
  ),
  3 => 
  array (
    0 => '01:40:12',
    1 => '1:07:12',
  ),
  4 => 
  array (
    0 => '12',
    1 => '12',
  ),
)

答案 1 :(得分:0)

我终于设法解决了这个问题。在休息一下并再次以清晰的头脑再次访问代码之后,我注意到最后的'*'应该是'+',以便强制至少有一个时间间隔的实例。

谢谢大家的回复。