2015-09-09 3 views
-1

Я работаю над некоторыми данными, загружаемыми из файла Excel с помощью PHPExcel. Все работает отлично с каждым полем, но у меня возникают проблемы с полем, который должен содержать шаблон.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: 34/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

Мне, наконец, удалось это исправить. Сделав паузу и снова придя к коду с ясным умом, я заметил, что окончательный «*» должен быть «+», чтобы заставить, по крайней мере, один экземпляр интервала времени.

Спасибо всем за ваши ответы.

Смежные вопросы