use strict; use warnings; use Parse::BBCode; my $p = Parse::BBCode->new({ tags => { youtube => { code => sub { my ($parser, $attr, $content) = @_; my $id = $$content; if ($id =~ m{^http://www\.youtube\.(?:de|com)/(?:(?:watch)?\?v=|embed/)(\S*)$}) { $id = $1; } my $escaped = Parse::BBCode::escape_html($id); return qq{}; }, parse => 0, }, }, }); my $bbcode = do { local $/; }; my $html = $p->render($bbcode); print $html; __DATA__ [youtube][/youtube] [youtube]1234_Abc[/youtube] [youtube]http://www.youtube.de/?v=1234_Abc[/youtube] [youtube]http://www.youtube.de/embed/1234_Abc[/youtube] [youtube]foo bar bam 123[/youtube] [youtube]http://www.youtube.com/watch?v=Hg8Fa_EUQqY[/youtube]