(вступление: 5 лет разработки с vBulletin)
Парсер vBulletin довольно сложный (возможно, излишне?) По сравнению с большинством регулярных выражений или выпадающих библиотек. Честно говоря, я просто покопался бы в этом и вытащил все, что можно, поскольку они, как правило, делают что-то немного по-другому. Я был бы удивлен, если бы вы получили отлично работающий парсер, не видя, как они на самом деле генерируют / анализируют его сами.
Если это старые данные, вы можете просто написать свои собственные, но если это старые и новые данные, поступающие, почему бы просто не кэшировать их на стороне vBulletin и использовать то, что они генерируют? Или просто используйте класс vB_BbCode_Parser напрямую ...
Надеюсь, это поможет.