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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регулярные выражения (замена блока <div>), Необходимо заменить старый блок новым 
:(
    Опции темы
Alex103
Дата 5.7.2010, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 416
Регистрация: 5.1.2005
Где: Украина, г. Харьк ов

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



Добрый день, подскажите пожалуйста как написать регулярное выражение для следующей задачи.
Есть HTML страничка:
Код

...
<div class="right-content">
                <div class="rblock-content">
                    <h1 class="block-title">Объявления</h1>
                    <div class="block-text">
                        
<ul class="vert-declarations">

        <li>
        
<h4>
        <a href="/index.php?option=com_content&amp;view=article&amp;id=18%3Atest&amp;catid=1%3Aobyavleniya&amp;lang=ru" class="contentpagetitle-declarations">
        Тест</a>
    </h4>


Для участия в олимиаде по ТМ, которая состоится 25 мая в 15:30 220м, приглашаются все желающие.<span class="article_separator">&nbsp;</span>
    </li>

        <li>
        
<h4>
        <a href="/index.php?option=com_content&amp;view=article&amp;id=17%3Atestovoe-soobzshhenie&amp;catid=1%3Aobyavleniya&amp;lang=ru" class="contentpagetitle-declarations">
        Тестовое сообзщение</a>
    </h4>


Для участия в олимиаде по ТМ, которая состоится 25 мая в 15:30 220м, приглашаются все желающие.<span class="article_separator">&nbsp;</span>
    </li>

        <li>
        
<h4>
        <a href="/index.php?option=com_content&amp;view=article&amp;id=6%3Akonsultacziya-u-140gr&amp;catid=1%3Aobyavleniya&amp;lang=ru" class="contentpagetitle-declarations">
        Консультация у 140гр</a>
    </h4>


<p><span class="accent-red">Консультация будет перенесена с 15:00 на 19:00.</span></p><span class="article_separator">&nbsp;</span>
    </li>

        <li>
        
<h4>
        <a href="/index.php?option=com_content&amp;view=article&amp;id=4%3Aolimpiada-po-tm&amp;catid=1%3Aobyavleniya&amp;lang=ru" class="contentpagetitle-declarations">
        Олимпиада по ТМ</a>
    </h4>


<p>Для участия в олимиаде по ТМ, которая состоится 25 мая в 15:30 220м, приглашаются все желающие.</p><span class="article_separator">&nbsp;</span>
    </li>

    </ul>

                    </div>
                </div>
...

Мне необходимо на ней заменить список с новостями обновленным, вот таким:
Код

<ul class="vert-declarations">
        <li>
        
<h4>
        <a href="/index.php?option=com_content&amp;view=article&amp;id=18%3Atest&amp;catid=1%3Aobyavleniya&amp;lang=ru" class="contentpagetitle-declarations">
        Тест</a>
    </h4>


<p>Для участия в олимиаде по ТМ, которая состоится 25 мая в 15:30 220м, приглашаются все желающие.</p><span class="article_separator">&nbsp;</span>

    </li>
        <li>
        
<h4>
        <a href="/index.php?option=com_content&amp;view=article&amp;id=17%3Atestovoe-soobzshhenie&amp;catid=1%3Aobyavleniya&amp;lang=ru" class="contentpagetitle-declarations">
        Тестовое сообзщение</a>
    </h4>


<p>Для участия в олимиаде по ТМ, которая состоится 25 мая в 15:30 220м, приглашаются все желающие.</p><span class="article_separator">&nbsp;</span>

    </li>
        <li>
        
<h4>
        <a href="/index.php?option=com_content&amp;view=article&amp;id=6%3Akonsultacziya-u-140gr&amp;catid=1%3Aobyavleniya&amp;lang=ru" class="contentpagetitle-declarations">
        Консультация у 140гр</a>
    </h4>


<p><span class="accent-red">Консультация будет перенесена с 15:00 на 19:00.</span></p><span class="article_separator">&nbsp;</span>

    </li>
        <li>
        
<h4>
        <a href="/index.php?option=com_content&amp;view=article&amp;id=4%3Aolimpiada-po-tm&amp;catid=1%3Aobyavleniya&amp;lang=ru" class="contentpagetitle-declarations">
        Олимпиада по ТМ</a>
    </h4>


<p>Для участия в олимиаде по ТМ, которая состоится 25 мая в 15:30 220м, приглашаются все желающие.</p><span class="article_separator">&nbsp;</span>

    </li>
    </ul>


Пишу следующее:
Код

$search = '/<ul class="vert-declarations">*<\/ul>/';
$replace = $new_block;        
$data = preg_replace($search, $replace, $data);


Не работает. Вопрос - почему?



--------------------
Мой адресс не дом и не улица, мой адресс WWW
PM MAIL WWW ICQ YIM   Вверх
patap
Дата 5.7.2010, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 893
Регистрация: 7.5.2005
Где: Украина, Зп

Репутация: 26
Всего: 40



Код

preg_match_all('#<ul class="vert-declarations">.*?</ul>#s', $text, $match);


ну в смысле
Код

$search = '#<ul class="vert-declarations">.*?</ul>#s';
$data = preg_replace($search, $replace, $data);



Цитата

Не работает. Вопрос - почему?


1. неправильная регулярка
2. нужно добавить модификатор s, чтобы метасимвол '.' включал в свое определение переводы строк

Это сообщение отредактировал(а) patap - 5.7.2010, 14:23


--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
Alex103
Дата 5.7.2010, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 416
Регистрация: 5.1.2005
Где: Украина, г. Харьк ов

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



Цитата(patap @ 5.7.2010,  14:10)
Код

preg_match_all('#<ul class="vert-declarations">.*?</ul>#s', $text, $match);


ну в смысле
Код

$search = '#<ul class="vert-declarations">.*?</ul>#s';
$data = preg_replace($search, $replace, $data);

Сработало, но теперь поясните пожалуйста почему?
Ведь * обозначает любой символ зачем здесь: . и ? одиночный символ? И что значит ключ s?

Это сообщение отредактировал(а) Alex103 - 5.7.2010, 14:21


--------------------
Мой адресс не дом и не улица, мой адресс WWW
PM MAIL WWW ICQ YIM   Вверх
bars80080
Дата 5.7.2010, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(Alex103 @  5.7.2010,  14:20 Найти цитируемый пост)
Ведь * обозначает любой символ

нет. * означает любое количество тех символов, что стоят перед ним
а вот точка означает один любой символ

Добавлено через 2 минуты и 37 секунд
? - ноль или один раз
s - модификатор (не скажу что делает)

вы походу спутали DOS с POSIX. 
PM MAIL WWW   Вверх
patap
Дата 5.7.2010, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 893
Регистрация: 7.5.2005
Где: Украина, Зп

Репутация: 26
Всего: 40



1. неправильная регулярка
2. нужно добавить модификатор s, чтобы метасимвол '.' включал в свое определение переводы строк


 . - любой символ
 * - от нуля и более


.*? - ленивая квантификация

если использовать жадную (.*) то результат может оказаться не таким как ожидаем, к примеру

есть такой текст, нужно заменить каждый из блоков
Код

<ul class="vert-declarations">
   text
</ul>
text
<ul class="vert-declarations">
   text
</ul>


1. Жадная квантификация (<ul class="vert-declarations">.*</ul>) - вернет от открывающего <ul и до последнего закрывающего тега </ul>
Код

<ul class="vert-declarations">
   text
</ul>
text
<ul class="vert-declarations">
   text
</ul>



2. ленивая - (<ul class="vert-declarations">.*?</ul>) вернет один блок
Код

<ul class="vert-declarations">
   text
</ul>



тут можешь почитать про жадную, ленивую и др
модификаторы




--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




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


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

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