2015-09-09 41 views
-1

我正在使用PHPExcel从Excel文件加载一些数据。一切工作都很好,但每个领域都有问题,但我有一些麻烦,应该包含一个模式。preg_match不能按预期工作

的图案是

(([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要检查的刺痛“1:00”这种模式。如果我添加一个变量来存储匹配,返回值为“”的一个元素数组。

我有一个在线工具(http://regexpal.com/)和工作检查模式如预期,但对于我未知的原因,的preg_match没有。

有什么我失踪?

+0

你可以向'preg_match'或'preg_match_all'显示你的电话吗?它似乎适用于我:https://ideone.com/t2JlcN – Scopey

回答

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', 
), 
) 
0

demo

<?php 

$str = '00:30:45/01:40:12 01:10:34/1:07:12/1:00'; 
//$str = '1:00'; 

$p = '/[0-9]+:[0-9]+(:[0-9]+|)/s'; 

preg_match_all($p, $str, $m); 

print_r($m); 

输出

Array 
(
[0] => Array 
    (
     [0] => 00:30:45 
     [1] => 01:40:12 
     [2] => 01:10:34 
     [3] => 1:07:12 
     [4] => 1:00 
    ) 

[1] => Array 
    (
     [0] => :45 
     [1] => :12 
     [2] => :34 
     [3] => :12 
     [4] => 
    ) 

0

我终于设法解决了这个问题。在休息一段时间并且以清晰的头脑重新回到代码后,我注意到最后的'*'应该用'+'来强制至少有一个时间间隔的实例。

谢谢大家的回复。