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


Автор: Rooner 9.12.2012, 11:50
Есть текст, разделенный блоками [тут текст и/или дата]
Нужно вытащить все даты из квадратных скобок и текст после скобок, результат поместить в массив.
Код

<p>[newpost 06.12.12]</p>
<p>Раз Раз Раз Раз Раз Раз</p>
[08.12.12 15:20:35]
<div class="err">Два Два Два Два Два Два Два Два</div>
<p>[newpost 10.12.12]</p>
<p>Три Три Три Три </p>

Хочется получить такой массив:
Код

[0][0]<p>06.12.12
   [1]<p>Раз Раз Раз Раз Раз Раз</p>

[1][0]08.12.12 15:20:35
   [1]<div class="err">Два Два Два Два Два Два Два Два</div>

[2][0]10.12.12
   [1]<p>Три Три Три Три </p>


В регулярках я плохо разбираюсь. У меня есть вот такая регулярка, она разбивает текст, но к сожалению не сохраняет текст после скобок, мб ее модернизировать...
Код

preg_match_all('/\[[^\[\]]+\]/', $sText, $rgMatches);

Автор: Evghenusi 9.12.2012, 17:28
мне самому не нравится то что предлагаю, но пока ничего умнее не придумал.
Код
/(\d{2}\.\d{2}\.\d{2}).+(?:\r|\n)(.+)$/m

http://goo.gl/yQT9F

Автор: Rooner 9.12.2012, 17:34
Evghenusi, я пробовал примерно такойже вариант, но всеже решил сделать так:
Код

    // находим даты
    preg_match_all('/[\d\.]+\s[\d\:]+/', $main, $dates);

    // разбиваем текст на блоки
    preg_match_all('/(<p>)?\[[^\[\]]*\](<\/p>)?/', $main, $rgMatches); // находим блоки со скобками
    $main = str_replace($rgMatches[0], '[flag]', $main); // заменяем их на [flag]
    $texts = explode('[flag]', $main);                   // делим текст и заносим в массив

Так вполне сойдет

Автор: Evghenusi 9.12.2012, 20:33
Цитата(Rooner @  9.12.2012,  17:34 Найти цитируемый пост)
Так вполне сойдет 
вам решать).

а я про время забыл((
/(\d{2}\.\d{2}\.\d{2}(?:\s\d+.\d+.\d+)?).+(?:\r|\n)(.+)$/m - страшненькая))

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