#!/usr/local/bin/perl5.10.0 my $string =<<"HERE"; I have some > and > > and that's it. HERE my @groups = $string =~ m/ ( # start of capture buffer 1 < # match an opening angle bracket (?: [^<>]++ # one or more non angle brackets, non backtracking | (?1) # found < or >, so recurse to capture buffer 1 )* > # match a closing angle bracket ) # end of capture buffer 1 /xg; $" = "\n\t"; print "Found:\n\t@groups\n";