use 5.010; use strict; use warnings; while () { chomp; say "$_ ", /(<+)[^<>]*(>+)(*COMMIT)(?(?{length($1) == length($2)})|(*FAIL))/ ? "matches" : "does not match"; } __DATA__ <1> <<2>> <<3> <<<<4>> <<5>>>>