my @strings = ('AZ', 'A SOMETHING Z', 'ASOMETHINGZ', 'A Z', 'A ZZ', 'AA ZZ', 'AAZZ', 'A Z'); for (@strings) { if (/^A( [^Z]*)?Z$/) { my $grabbed = $1 // ''; say "'$_' grabbed '$grabbed'"; } else { say "'$_' did not match" } } __END__ 'AZ' grabbed '' 'A SOMETHING Z' grabbed ' SOMETHING ' 'ASOMETHINGZ' did not match 'A Z' grabbed ' ' 'A ZZ' did not match 'AA ZZ' did not match 'AAZZ' did not match 'A Z' grabbed ' '