Regex. Split. Fine Solution.
Есть большой текст с заголовками, обрамленными BB кодом [h][/h], и текстом под каждым заголовком.
Задача: разбить текст так, чтобы получить структурированный массив, каждый элемент которого будет состоять из заголовка, соответствующего текста.
Для этого воспользовался встроенной в php функцией preg_split(). Итак, формируем regex вместе с нашей функцией:
preg_split(’/(\[h\].*\[\/h\])/’, $text, -1, PREG_SPLIT_DELIM_CAPTURE);
PREG_SPLIT_DELIM_CAPTURE — этот флаг значит, что нам нужно содержание самого делимитера, то есть то, что соответствует условию ‘/(\[h\].*\[\/h\])/’. Итак, получаемкрасивый массив с чередующимися элементами заголовок/текст, которые легко потом обработать как тебе хочется. Например, мне надо было убрать еще и BB код [h][/h]. Для этого заголовки подвергаются такой незамысловатой обработке:
$result = preg_replace(’/(\[h\])(.*)(\[\/h\])/’, ‘\\2′, $v)
Где $result — \то заголовок без BB кода, $v –данный заголовок, ‘\\2′ — значит, что нам нужна только вторая скобка в regex
Вот так, надеюсь кому-нибудь будет полезно. ;)
