in reply to regexp identify variable number of digits within a sentence

TIMTOWTDI

if ( $dog =~ /[^|]*\|[^|]*\|[^|]*\|([A-Z ]*)\.\s([A-Z]{2})\s(\d{6,8})\ +.\s(\d{2}-\d{2}-\d{2})/ ) { my $name = $1; my $id = $2 . $3; my $dob = $4;

Three repeats of "anything not a pipe followed by a pipe"; capture the name; period; space; capture the two leading letters in the ID; space; capture 6 to 8 digits (see explanation above of unix vs perl handling of the numeric quantifier range); period, space; capture dob.

I'm confused: at one point you state that the id may contain 6 to 8 (inclusive) digits but later write that you wish to allow 6-9 digits. Is that because sometimes a 9-digit id is "legal"?

Arguably ugly; also arguably "(painfully) clear."

Dealing with the permissable alternate characters in the name and with alternate (typo) hyphens in the id (hint: "quantifiers" and "alternation") left as an exercise for the OP.