$text =~ s{ (?: (^|\s|\>) # $1 ( # $2 (http|https) # $3 ://www.youtube.com/watch\?\.*v= ([a-z0-9-_%]+) # $4 [&\w;=\+\-]* ) ) | (?: \Q[video]\E (^|\s|\>) # $5 ( # $6 (http|https) # $7 ://www.youtube.com/watch\?\.*v= ([a-z0-9-_%]+) # $8 [&\w;=\+\-]* ) \Q[/video]\E ) }{ my $ret = ""; my $https = $3 || $7; my $vid = $4 || $8; $ret .= ""; $ret .= escapeHTML($vid); $ret .= ""; $ret; }gmsxie;