my @names = ( 'Daniel R Von Vanderschmidt', 'Daniel Von Vanderschmidt', 'Daniel De La Silvia', 'Daniel De Silvia', 'Daniel La Silvia', ); for my $name (@names) { my @comps = $name =~ m{(?:Von|De La|La).*|\w+}g; print "[$_]" for @comps; print "\n"; } #### [Daniel][R][Von Vanderschmidt] [Daniel][Von Vanderschmidt] [Daniel][De La Silvia] [Daniel][De][Silvia] [Daniel][La Silvia]