Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

С помощью регулярки выдернуть только первый абзац

14K
23 января 2008 года
makis
29 / / 16.01.2007
Доброго времени суток.
У меня следующий вопрос. В БД занесены статьи. Каждая из них состоит из разного кол-ва абзацев:
[HTML]
<p class="pe">Последовательная энергонезависимая память - наиболее гибкий тип долговременной энергонезависимой памяти, которая обеспечивает возможность записи вплоть до байтового уровня, без необходимости стирания данных перед записью нового значения. Это делает их идеальными для хранения параметров.</p>
<p class="pe">Новые высокоскоростные микросхемы с высокой плотностью памяти ЭППЗУ (EEPROM) и последовательной Flash-памяти обеспечивают хранение кода, занимая мало места на плате при пониженном числе выводов.</p>
<p class="pe">Семейства последовательной Flash-памяти ST имеют возможность "секторного стирания / страничной прошивки" и "страничного стирания / страничной прошивки". Это стало возможно благодаря более тонкой мелкоячеистости памяти по сравнению со стандартной Flash-памятью, характеристика зернистости которой не соответствует характеристике байтового уровня последовательного ЭППЗУ.</p>
[/HTML]
Пишу вывод всех статей из рубрики. Выводить нужно название, краткое содержание, дату и т.п. Вот с кратким содержанием проблема. Нужно перебирать регуляркой каждый абзац в документе и обрезать его до определённого кол-ва сиволов. Но статьи весьма немаленькие и их довольно много. Поэтому на вывод списка всех статей рубрики может уйти довольно много времени.
Как вариант придумал такое:
 
Код:
preg_match_all('/^<p class=\"pe\">(.{250}.*\.)<\/p>$/U', $pagecontent, $introtext);
$intro = $introtext[1];

Т.е. дёргаем первые 250 символов и потом до первой точки. Но не катит по причине того, что скрипт будет шурстрить во всем документу и вносить в массив все найденые совпадения. Мне же нужно, чтоб он нашёл первое совпадение и успокоился.
И вообще думаю создать отдельную таблицу для вступления к статьям и обработать их таким образом, чтоб лишний раз не напрягать БД.
Что думаете? Как мне лучше поступить?
8
23 января 2008 года
mfender
3.5K / / 15.06.2005
Я думаю, что лучше всего во временной переменной убрать все тэги (strip_tags()), убрать вообще всё лишнее, и потом уже вырезать анонс из всего этого.

PS. Да, главное не забыть, что резать текст посреди слова и ставить многоточие - некрасиво. Поэтому лучше предусмотреть функцию, которая будет в указанных пределах находить конец слова, а ещё лучше - предложения (что ещё проще).

PPS. А совсем правильно - юзать для этих нужд DOM.
271
23 января 2008 года
MrXaK
721 / / 31.12.2002
а для резки есть функция wordwrap(), которая умеет находить слова)
15
23 января 2008 года
shaelf
2.7K / / 04.05.2005
substr + strpos
8
23 января 2008 года
mfender
3.5K / / 15.06.2005
Цитата: Mr.Hacker
а для резки есть функция wordwrap(), которая умеет находить слова)


а напейсать слабо?
к тому же, поспешу порадовать, wordwrap совершенно не хочет понимать юникод и очень придирчив к локалям.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог