#!/usr/bin/perl use warnings; use strict; my @inarr = ( 'stuff{tag}stuff', 'stuff blah {foo}', 'stuff blah foo ', 'stuff blah ', ); my $re = qr/( < (?: ig | igt | igo | igxo ) ; .+? > )/x; for my $lin (@inarr) { my @g = $lin =~ m/$re/g; print join ' ', map "[$_]", @g; print "\n"; }