Preg_match_all для прикрепления bbcode

У меня есть два типа bbcode: [attach]1234[/attach][attach=full]1234[/attach]

$message = 'this is message with attach [attach=full]1234[/attach]

Я хочу удалить все из строки и использовать:

(preg_match_all('/\[ATTACH((.*?)\](.+?)\[/ATTACH\]/i', $message, $out, PREG_SET_ORDER))
if (preg_match_all('/\[ATTACH((.*?)\](.+?)\[/ATTACH\]/i', $message, $out, PREG_SET_ORDER))
{   
    for ($i=0;$i<count($out);$i++)
    {
        $replace_src[] = $out[$i][0];
        $replace_str[] = $out[$i][1];
        $newMessage = str_ireplace($replace_src, $replace_str, $message);
    }
}

Этот код удаляет [attach][/attach], но не удаляет [attach=full][/attach]. =full существует в сообщении.

Почему бы вам не использовать preg_replace()?

Barmar 13.05.2022 21:26

У вас есть непревзойденный ( в вашем регулярном выражении: ((.*?)

Barmar 13.05.2022 21:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
16
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте preg_replace(), а не preg_match_all().

Используйте необязательную группу, чтобы соответствовать необязательному =xxx после attach.

$newMessage = preg_replace('/\[ATTACH(?:=.*?)?\](.+?)\[/ATTACH\]/i', '$1', $message);

Этот код не удаляет 1234, удаляет только [прикрепить]

Dimitry 13.05.2022 21:36

Я думал, что это то, что вы хотели, из-за того, как вы используете $replace_str[] = $out[$i][1]; в своем коде.

Barmar 13.05.2022 21:37

Другие вопросы по теме