#!/usr/bin/perl # http://perlmonks.org/?node_id=1196747 use strict; use warnings; use Data::Dumper; while() { /RepeatingGroup\s*=\s* (?\b\w+\b) (\s*,\s* ((?\bFlatten\b)|(?\b(in|out)\b)) )* \s*$/x or next; print $_, Dumper \%+; } __DATA__ RepeatingGroup = Waiver, Flatten, out RepeatingGroup = Waiver, out RepeatingGroup = Waiver, out, Flatten RepeatingGroup = Waiver , in RepeatingGroup = Waiver , Flatten RepeatingGroup = LEI, out, Flatten