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

Вот так, надеюсь кому-нибудь будет полезно. ;)



Нет комментариев

Комментарий: