Удалить размер bbcode из текста сообщения

Прости меня за то, что я не лучше в регулярных выражениях.

Извинения: пример обновлен

Я убираю мусор на форуме phpBB с помощью скрипта PHP. phpBB кодирует bbcode с каким-то ключом, 8-значной строкой, которая появляется после двоеточия. Вот пример:

outer [size=5:24f81ld3]inner text[/size:24f81ld3] outer

Я пытаюсь разделить, где размер один символ, а не два, поэтому выше будет:

outer inner text outer

Но это:

outer [size=100:24f81ld3]inner text[/size:24f81ld3] outer

Было бы НЕ стать этим:

outer inner text outer

Цени любую помощь!

1

Решение

Вот код

function remove_phpbb_garbage($str)
{
return preg_replace('/\[size=[0-9a-z](?::[0-9a-z]+)?\]((?:[^\[]|\[(?!\/size))*)\[\/size(?::[0-9a-z]+)?\]/i', '\1', $str);
}

Вот тестовые сценарии использования:

echo remove_phpbb_garbage("outer [size=1]inner text[/size] outer"), "\n";
echo remove_phpbb_garbage("outer [size=5:24f81ld3]inner text[/size] outer"), "\n";
echo remove_phpbb_garbage("outer [size=100:24f81ld3]inner text[/size] outer"), "\n";
echo remove_phpbb_garbage("outer [size=100:24f81ld3]inner text[/size] outer"), "\n";
echo remove_phpbb_garbage("outer [size=5:24f81ld3]inner text[/size:24f81ld3] outer"), "\n";
echo remove_phpbb_garbage("outer [size=100:24f81ld3]inner text[/size:24f81ld3] outer"), "\n";
echo remove_phpbb_garbage("[b:2q9o3yfx][size=2:2q9o3yfx][font=Arial:2q9o3yfx]Please be careful on how to Jail break your Iphone. In case if you are not already did it. There is a lot of specific instructions How to Jail break your phone on the web. Please read up before attempting a Jail break.[/font:2q9o3yfx][/size:2q9o3yfx][/b:2q9o3yfx] _________________ [bg2ads1:2q9o3yfx][/bg2ads1:2q9o3yfx]"), "\n";

Вот вывод:

outer inner text outer
outer inner text outer
outer [size=100:24f81ld3]inner text[/size] outer
outer [size=100:24f81ld3]inner text[/size] outer
outer inner text outer
outer [size=100:24f81ld3]inner text[/size:24f81ld3] outer
[b:2q9o3yfx][font=Arial:2q9o3yfx]Please be careful on how to Jail break your Iphone. In case if you are not already did it. There is a lot of specific instructions How to Jail break your phone on the web. Please read up before attempting a Jail break.[/font:2q9o3yfx][/b:2q9o3yfx] _________________ [bg2ads1:2q9o3yfx][/bg2ads1:2q9o3yfx]

Важная заметка: Функция делает не обрабатывать вложенные size теги правильно!


Если вы заинтересованы в регулярных выражениях, этот замечательный ресурс охватывает их во всех деталях и вариантах:
http://www.regular-expressions.info/

1

Другие решения

Приведенное ниже регулярное выражение будет соответствовать тегу размера, только если его значение будет ровно одним символом.

Regex:

\[(size)=[^:]:([^\]\[]*)\]([^\[\]]*)\[\/\1:\2]

Строка замены:

$3

DEMO

Код будет,

preg_replace('~\[(size)=[^:]:([^\]\[]*)\]([^\[\]]*)\[\/\1:\2]~', '$3', $str);
0