Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> рекурсия в регулярных выражениях, рекурсивный обход РВ 
:(
    Опции темы
cia
  Дата 23.11.2010, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 15.1.2007

Репутация: нет
Всего: 4



Добрый день, уважаемые коллеги.
Задача: распарсить вот этот текст:
Код

<ul>
    <li><a href="index.php?SECTION_ID=785">item 1</a>
        <ul>
            <li><a href="index.php?SECTION_ID=1742">item 2</a>
                <ul>
                    <li><a class="deepest" href="index.php?SECTION_ID=1743">item 3</a></li>
                    <li><a class="deepest" href="index.php?SECTION_ID=1744">item 4</a></li>
                </ul>
            </li>
            <li><a href="index.php?SECTION_ID=1745">item 5</a>
                <ul>
                    <li><a class="deepest" href="index.php?SECTION_ID=1746">item 6</a></li>
                    <li><a class="deepest" href="index.php?SECTION_ID=1747">item 7</a></li>
                </ul>
            </li>
            <li><a href="index.php?SECTION_ID=791">item 8</a>
                <ul>
                    <li><a class="deepest" href="index.php?SECTION_ID=792">item 9</a></li>
                    <li><a class="deepest" href="index.php?SECTION_ID=793">item 10</a></li>
                </ul>
            </li>
        </ul>
    </li>
    <li><a href="index.php?SECTION_ID=862">item 11</a>
        <ul>
            <li><a href="index.php?SECTION_ID=2776">item 12</a>
                <ul>
                    <li><a class="deepest" href="index.php?SECTION_ID=2777">item 13</a></li>
                    <li><a class="deepest" href="index.php?SECTION_ID=2778">item 14</a></li>
                    <li><a class="deepest" href="index.php?SECTION_ID=2782">item 15</a></li>
                </ul>
            </li>
            <li><a href="index.php?SECTION_ID=2793">item 16</a>
                <ul>
                    <li><a class="deepest" href="index.php?SECTION_ID=2794">item 17</a></li>
                    <li><a class="deepest" href="index.php?SECTION_ID=2795">item 18</a></li>
                </ul>
            </li>
            <li><a href="index.php?SECTION_ID=2796">item 19</a>
                <ul>
                    <li><a class="deepest" href="index.php?SECTION_ID=2797">item 20</a></li>
                    <li><a class="deepest" href="index.php?SECTION_ID=2798">item 21</a></li>
                    <li><a class="deepest" href="index.php?SECTION_ID=5779">item 22</a></li>
                </ul>
            </li>
            <li><a href="index.php?SECTION_ID=2800">item 23</a>
                <ul>
                    <li><a class="deepest" href="index.php?SECTION_ID=5780">item 24</a></li>
                    <li><a class="deepest" href="index.php?SECTION_ID=2806">item 25</a></li>
                    <li><a class="deepest" href="index.php?SECTION_ID=2807">item 26</a></li>
                </ul>
            </li>
            <li><a href="index.php?SECTION_ID=2808">item 27</a>
                <ul>
                    <li><a class="deepest" href="index.php?SECTION_ID=2810">item 28</a></li>
                    <li><a class="deepest" href="index.php?SECTION_ID=2811">item 29</a></li>
                </ul>
            </li>
            <li><a class="deepest" href="index.php?SECTION_ID=2783">item 30</a></li>
        </ul>
    </li>
    <li><a class="deepest" href="index.php?SECTION_ID=912">item 31</a></li>
</ul>


Пытаюсь решить задачу с помощью такого кода:
Код

    private function regularCategoryParse(&$buffer='') {
        if(!$buffer) {
            $buffer=&$this->buffer;
        } else {
            echo '<BR>parent: '.$this->_pid.'; current: '.$buffer[2];
            $_pid=$this->_pid;
            $this->_pid=$buffer[2];
            $buffer=$buffer[4];
        }
        preg_replace_callback('/<li><a href=\"([^"]+SECTION_ID=(\d+))">([^<]*)<\/a>[\s\r\n]*?<ul>(.*?<\/ul>)/s',array($this,'regularCategoryParse'),$buffer);
        $this->_pid=$_pid;
//        preg_replace_callback('/'.$this->regularCategory2.'/s',array($this,'regularCategoryCallBack2'),$buffer);
    }


Всё вроде бы хорошо, но жизненно важно корректно распознать родительский идентификатор (SECTION_ID из "a href=..."). Т.е. в пятой строке выдается неверный ид - рекурсивный обход так проходит.
Как быть? Подскажите, плз.
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0374 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.