while() { print /^([-\w' ]+\(\d+\)(:[-\w' ]+\(\d+\))*)$/ ? "match capture >$1< $_\n" : "no match $_\n"; } __DATA__ namexx(10) name2(8):name3(3) name4(12):name5(3):name6(3) O'Keefe(1) Jo-Anne Smith(2) F$%^Y@^(1) name(1)name(3) name(1)::name(3)