#!/usr/bin/perl
my $string = "
BEGIN <<date>>
<<something>
BEGIN
<<something>>
END <<comment>>
BEGIN <<time>>
<<more somethings>>
BEGIN(cause we can)END
BEGINEND
END
<<something else>>
END
";
$string =~
(?(DEFINE)
(?<pattern1>BEGIN)
(?<pattern2>END)
)
(?&pattern1)
(
(?> (?# <-- "once only" search )
(
(?! (?&pattern1) | (?&pattern2)).
)+
)
| (?R)
)*
(?&pattern2)
/!!!!/;
IyEvdXNyL2Jpbi9wZXJsCgpteSAkc3RyaW5nID0gIgpCRUdJTiA8PGRhdGU+PgogIDw8c29tZXRoaW5nPgogICAgQkVHSU4KICAgICAgPDxzb21ldGhpbmc+PgogICAgRU5EIDw8Y29tbWVudD4+CiAgICBCRUdJTiA8PHRpbWU+PgogICAgICA8PG1vcmUgc29tZXRoaW5ncz4+CiAgICAgIEJFR0lOKGNhdXNlIHdlIGNhbilFTkQKICAgICAgQkVHSU5FTkQKICAgIEVORAogIDw8c29tZXRoaW5nIGVsc2U+PgpFTkQKIjsKJHN0cmluZyA9fgpzLyg/eHMpCig/KERFRklORSkKCSg/PHBhdHRlcm4xPkJFR0lOKQoJKD88cGF0dGVybjI+RU5EKQopCig/JnBhdHRlcm4xKQooCiAgICg/PiAoPyMgPC0tICJvbmNlIG9ubHkiIHNlYXJjaCApCiAgICAgICgKICAgICAgICAgKD8hICg/JnBhdHRlcm4xKSB8ICg/JnBhdHRlcm4yKSkuCiAgICAgICkrCiAgICkKICAgfCAoP1IpCikqCig/JnBhdHRlcm4yKQovISEhIS87CnByaW50ICIkc3RyaW5nIjs=