2012-03-27 4 views
1

Я никогда не использовал регулярные выражения, и поэтому у меня есть несколько вопросов.PHP preg_match() - регулярное выражение неопределенное?

В принципе, я создал простой класс, который возвращает текст между указанными тегами пользователя.

function getData($tagname){ 
    $this->tagname = $tagname; 
    $string = $this->dump; 
    $pattern = "/<$tagname>(.*?)<\/$tagname>/s"; 
    preg_match($pattern,$string,$matches,PREG_OFFSET_CAPTURE); 
    print_r($matches); 
} 

Это дает мне информацию, необходимую, но его возвращение нескольких копий в массиве, им просто интересно, что причиной этого является?

Например

$depData->getData('departureTime'); 

Возвращает

Array ([0] => Array ([0] => 2012/03/07 12:45:13 [1] => 41) [1] => Array ([0] => 2012/03/07 12:45:13 [1] => 56)) 

Im думая, что его что-то делать с моей регулярное выражение в том, чтобы расплывчато?

+2

Просьба вставить вход, который вы соответствуете. – socha23

+0

Gorouck 2012/03/07 12:45:13 cosmicsafari

+0

Я готов поспорить, что это не тот фактический результат, который вы получаете , Вы должны получать ' 2012/03/07 12:45:13' в 'Array [0]' и '2012/03/07 12: 45: 13' в' Array [1] ' , –

ответ

1

Это дает давая вам 2 результаты первого является для всей expresion<tag>(.*?)</tag> и второй результат для результата в скобках(.*?)

Также я создал пример для вас, чтобы увидеть разницу между первый захват (целое выражение) и захват скобок (ваш serach).

http://xrg.es/#1ompqhf

Примечание: я заменил < и > с " для вас, чтобы увидеть более ясно, что по-другому.

+0

Как я уже сказал, что это не связано с регулярными выражениями, как бы я решил решить эту проблему? – cosmicsafari

+0

Нет проблемы .. вам просто нужно взять первый результат .. также .. если вам не все равно, где выражение было найдено .. удалите параметр 'PREG_OFFSET_CAPTURE'. – SERPRO

+0

+1 результирующий вложенный массив был немного раздражающим, но это происходит из опции 'PREG_OFFSET_CAPTURE', которая добавляет индекс соответствия! – stema

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