С помощью регулярки выдернуть только первый абзац
У меня следующий вопрос. В БД занесены статьи. Каждая из них состоит из разного кол-ва абзацев:
[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];
$intro = $introtext[1];
Т.е. дёргаем первые 250 символов и потом до первой точки. Но не катит по причине того, что скрипт будет шурстрить во всем документу и вносить в массив все найденые совпадения. Мне же нужно, чтоб он нашёл первое совпадение и успокоился.
И вообще думаю создать отдельную таблицу для вступления к статьям и обработать их таким образом, чтоб лишний раз не напрягать БД.
Что думаете? Как мне лучше поступить?
PS. Да, главное не забыть, что резать текст посреди слова и ставить многоточие - некрасиво. Поэтому лучше предусмотреть функцию, которая будет в указанных пределах находить конец слова, а ещё лучше - предложения (что ещё проще).
PPS. А совсем правильно - юзать для этих нужд DOM.
а для резки есть функция wordwrap(), которая умеет находить слова)
substr + strpos
Цитата: Mr.Hacker
а для резки есть функция wordwrap(), которая умеет находить слова)
а напейсать слабо?
к тому же, поспешу порадовать, wordwrap совершенно не хочет понимать юникод и очень придирчив к локалям.