my @strings = ('AZ', 'A SOMETHING Z', 'ASOMETHINGZ', 'A Z', 'A ZZ', 'AA ZZ', 'AAZZ'); for (@strings) { if (/A( .*?)?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' grabbed ' ' 'AA ZZ' grabbed ' ' 'AAZZ' grabbed ''