Я написал регулярное выражение для удаления тегов BBCode - он просто удаляет разрешенные теги (для последующего подсчета длины строки без тегов).
Я не эксперт, когда дело доходит до регулярных выражений - так что через час я обнаружил, что это довольно эффективно:
$pattern = "/\[\/?(i|b|u|url(.*?)|list|li)[\]\[]*\]/i";
$stripped = preg_replace($pattern, '', $text);
Он удаляет только разрешенные шесть тегов (и не более того, что предполагается) и специальный тег 'url', который может быть расширен как 'url = http://someurl'.
1009 * Т.е. *
in: [url=someurl]Lorem[/url] ipsum [test]dolor[/test] sit [b]amet[/b].
out: Lorem ipsum [test]dolor[/test] sit amet.
Но проблема в том, что он не только удаляет url = [sometext], но и urlipsum.
Я пытался добавить '=' для разбора, но не смог добраться до сути.
У кого-нибудь есть подсказка для меня, как убрать URL, только когда он идет с =?