У меня есть два типа 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(), а не preg_match_all().
Используйте необязательную группу, чтобы соответствовать необязательному =xxx после attach.
$newMessage = preg_replace('/\[ATTACH(?:=.*?)?\](.+?)\[/ATTACH\]/i', '$1', $message);
Этот код не удаляет 1234, удаляет только [прикрепить]
Я думал, что это то, что вы хотели, из-за того, как вы используете $replace_str[] = $out[$i][1]; в своем коде.
Почему бы вам не использовать
preg_replace()?