@Alk90
php, mysql, jquery, css, html, api

Как разбить текст по BB тегу и переносу строки одновременно?

Всем привет! Я хочу разбить текст на элементы массива так, чтобы картинки и текст были в отдельных элементах. Нужно это для того, чтобы текст взять в абзацы, а картинки в теги figure с дополнительной обработкой получения ссылки, вместо названия изображения.
У меня получился вот такой код:
$arr = preg_split("#(\n\n|(?=\[IMG=[^\]]+\]))#isu", $text);


Пример текста вот:
Какой-то текст [IMG=3902565d3789b88c50b.jpg] Текст после картинки без переноса[IMG=3902565d3789b88c50b.jpg]

Текст после изображения с переносом

Обычный абзац

Текст перед картинкой вконце всего текста [IMG=3902565d3789b88c50b.jpg]


И вот результат:
Array(
    [0] => Какой-то текст 
    [1] => [IMG=3902565d3789b88c50b.jpg] Текст после картинки без переноса
    [2] => [IMG=3902565d3789b88c50b.jpg]
    [3] => Текст после изображения с переносом
    [4] => Обычный абзац
    [5] => Текст перед картинкой вконце всего текста 
    [6] => [IMG=3902565d3789b88c50b.jpg]
)


Не получается разделить текст, который находится после первой картинки, потому что он не соответствует условию, а использовать "назад смотряшие" нельзя, потому что для них нужна фиксированная длинна.
Я попробовал таким способом:
$arr = preg_split("#(\n\n|(?=\[IMG=[^\]]+\])|(?:\[IMG=[^\]]+\])(?!\[IMG))#isu", $text);


Но получилось только хуже, потому что теперь разбивка происходит по картинкам и они совсем пропадают из массива.
  • Вопрос задан
  • 60 просмотров
Решения вопроса 1
Oldshelf
@Oldshelf
Неидеально, но кажется работает:

$text='Какой-то текст [IMG=3902565d3789b88c50b.jpg] Текст после картинки без переноса[IMG=3902565d3789b88c50b.jpg][IMG=3902565d3789b88c50b.jpg]

Текст после изображения с переносом

Обычный абзац

Текст перед картинкой вконце всего текста [IMG=3902565d3789b88c50b.jpg].';

$split="SPLIT";

$text=preg_replace ("#(.*)(\[IMG\=.+\])(.*)#Uisu", $split."$1".$split."$2".$split."$3", $text);

$t_arr=explode ($split, $text);
foreach ($t_arr as $k=>$v)
 if ($v!="") $arr []=trim ($v);

print_r ($arr);


Array
(
    [0] => Какой-то текст
    [1] => [IMG=3902565d3789b88c50b.jpg]
    [2] => Текст после картинки без переноса
    [3] => [IMG=3902565d3789b88c50b.jpg]
    [4] => [IMG=3902565d3789b88c50b.jpg]
    [5] => Текст после изображения с переносом

Обычный абзац

Текст перед картинкой вконце всего текста
    [6] => [IMG=3902565d3789b88c50b.jpg]
    [7] => .
)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы