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.
In reply to Re: regexp identify variable number of digits within a sentence
by ww
in thread regexp identify variable number of digits within a sentence
by bdalzell
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |