http://www.perlmonks.org?node_id=7778

Q&A > regular expressions > How do I match for several strings, matching the longest stringfirst? - Answer contributed by chromatic

Another option is to arrange your search terms into a sorted list:
my @terms = sort { length $b <=> length $a } ('lymph', 'lymph node'); my @text = ('right lymph node', 'lymph fluid'); my %results; foreach my $term (@terms) { $results{$term} = (grep /\b$term\b/, @text); # find matches @text = grep !/\b$term\b/, @text; # remove matches } foreach (keys %results) { print "$_:\t", $results{$_}, "\n"; }
This is likely less expensive with more search terms than building a large regexp, but the grep unfound operation may not help.