>perl -wMstrict -le "for (@ARGV) { if(/^A ((?: \s [^Z]*)?) Z$/x) { print qq{matched '$_' grabbed '$1'}; } } " AZ AZZ AXZ "A ZZ" "A SOMETHING Z" ASOMETHINGZ "A Z" "A Z" matched 'AZ' grabbed '' matched 'A SOMETHING Z' grabbed ' SOMETHING ' matched 'A Z' grabbed ' ' matched 'A Z' grabbed ' '