Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > Количество тегов


Автор: Zorak 30.9.2014, 22:04
Здраствуйте форумчани. Может гдето уже и обсуждалось, но своей темы так и ненашол.. Итак задача: нужно подсчитать количество открывающих тегов, которые существуют в тексте, и количество закрывающих для них тегов. какбы все хорошо, есть только одно но... мне кажется что проблемы в преобразование именно в текст. Вот мои телодвижения:

Код

        for ($i = 0; $i < $countTag; $i++)
        {
            $pattern = '(\<' . $listTags[$i] . '[\s|\>])'; 
            $arResult[$listTags[$i]]['open'] = preg_match_all($pattern, preg_quote($text));
            $pattern = '(\<\/' . $listTags[$i] . '\>)'; 
            $arResult[$listTags[$i]]['close'] = preg_match_all($pattern, preg_quote($text));
        }

Примерно вот так. Отдельно тестил паттерны в программах, которые умеют работать с регулярками, то считает как раз все ок. Исходя из этого мне в голову пришла мысль что чтото я в самом ПХП делаю не так. Помогите найти ошибку. Спасибо.
З.Ы. Без preg_quote() тоже не работает.

З.Ы.Ы. Забыл добавить. $text - ето полная HTML страница, стянутая по адресу, начиная с 
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN"

и заканчивая
Код

</html>

Спасибо.

Автор: _zorn_ 1.10.2014, 03:36
1. preg_quote надо применять на регулярку.
2. $pattern должен начинаться и оканчиваться с одинаковых символов, означающих начало и конец регулярки. Да и группировка с запоминанием тут вообще не к месту.
3. В символьном классе | означает именно |
Попробуйте как то так
Код

        for ($i = 0; $i < $countTag; $i++)
        {
            $pattern = '#'.preg_quote('<' . $listTags[$i] . '[\s>]','#').'#i'; //i - модификатор "без учета регистра"
            $arResult[$listTags[$i]]['open'] = preg_match_all($pattern, $text);
            $pattern = '#'.preg_quote('</' . $listTags[$i] . '>','#').'#i'; 
            $arResult[$listTags[$i]]['close'] = preg_match_all($pattern, $text);
        }

Ну и сами регулярки по моему нужно пересмотреть. Оставляю вам в качестве домашнего задания smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)