регулярное выражение для удаления тегов bbcode с атрибутами

У меня есть несколько тегов bbcode, которые имеют атрибуты phpbb (5-значное значение - предполагаемый цвет текста или что-то в этом роде). В тексте они выглядят так:

This is [b:31747]bold[/b:31747] text and so is [b:17171]this[/b:17171].

Я не могу заставить работать регулярное выражение, которое находит bracket+b+colon+any_combo_of_5_digits+end_bracket и позволяет заменить его соответствующим html. Использование функции php preg_replace(), если это имеет значение.


person Jeff O    schedule 31.03.2011    source источник
comment
Вы хотите удалить только начальный и конечный теги? Или вы хотите удалить содержимое тоже?   -  person ridgerunner    schedule 01.04.2011
comment
сохраняя содержимое, заменяя теги соответствующим html. \ перед d был недостающим ингредиентом.   -  person Jeff O    schedule 01.04.2011
comment
Если у вас есть хороший ответ, вы должны отметить его. Это позволит всем узнать, что ваш вопрос/проблема решена (и отдать должное там, где это необходимо).   -  person ridgerunner    schedule 03.04.2011


Ответы (4)


Вам нужно регулярное выражение:

\[/?b:\d{5}]
person Josh M.    schedule 31.03.2011

Это должно работать как с открывающими, так и с закрывающими тегами для любого типа тегов:

$string = preg_replace("/\[(\/?[a-zA-Z]+):[\d]{5}\]/is", "<$1>", $string);
person tvkanters    schedule 31.03.2011
comment
Все еще слишком точно для меня, что я в итоге использовал: preg_replace("/\[(\/?[^\[\]]+):[a-z0-9]+\]/is", "[$1]", $string); - person DustWolf; 30.08.2020

Это заменит полужирный, подчеркнутый и курсивный теги.

$new_text = preg_replace('~\[(/?[bui]):\d+\]~is', '<$1>', $text);
echo $new_text; // This is <b>bold</b> text and so is <b>this</b>.
person Czechnology    schedule 31.03.2011

preg_replace("/\[\/?b:[0-9]*?\]/","","[b:17171]this[/b:17171]");

http://ideone.com/fDCZM

person Johnald    schedule 31.03.2011