@matches = map { /^(\d\s+foo)/; $1 } /(?:\d\s+foo[^\r\n]*)/g; #### # Specific case: /(?:\d\s+foo[^\r\n]*)/; # General case: $repeated = qr/\d\s+foo/; /(?:$repeated[^\r\n]*)$repeated/; #### list : term list_ { [ $item[0], $item[1], @{$item[2]} ] } list_ : sep term { [ $item[1], @{$item[2]} ] } | { [ ] }