use strict;
my $str = '<p><!--beginTweet--></p><blockquote class="twitter-tweet"><p dir="ltr" lang="en">The <a href="https://twitter.com/hashtag/SeaKraken?src=hash&ref_src=twsrc%5Etfw">#SeaKraken</a> & <a href="https://twitter.com/ClimateArena?ref_src=twsrc%5Etfw">@ClimateArena</a> will require all guests, ages 12+, attending Kraken games, concerts & events at Climate Pledge Arena to provide proof of vaccination to keep fans, staff, players & artists safe.<br><br>More info → <a href="https://t.co/f2EmV5cXd0">https://t.co/f2EmV5cXd0</a> <a href="https://t.co/wJY9ElJ0DQ">pic.twitter.com/wJY9ElJ0DQ</a></p>— Seattle Kraken (@SeattleKraken) <a href="https://twitter.com/SeattleKraken/status/1435273531256885255?ref_src=twsrc%5Etfw">September 7, 2021</a></blockquote><p><!--endTweet--></p>
<!--beginFart-->df<!--endFart-->';
my $regex = qr/(?>\<\!--begin(?<type>\w+)--\>)(?<embed>.+)(?>\<\!--end(?>\1)--\>)/mp;
if ( $str =~ /$regex/g ) {
print "Whole match is ${^MATCH} and its start/end positions can be obtained via \$-[0] and \$+[0]\n";
# print "Capture Group 1 is $1 and its start/end positions can be obtained via \$-[1] and \$+[1]\n";
# print "Capture Group 2 is $2 ... and so on\n";
}
# ${^POSTMATCH} and ${^PREMATCH} are also available with the use of '/p'
# Named capture groups can be called via $+{name}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Perl, please visit: http://perldoc.perl.org/perlre.html