in reply to Re: Newbie parsing problem
in thread Newbie parsing problem

your solution ignores the name in case there's no middle initial (or just no trailing spaces), which is the first example. adding \W* or \s* instead of a single blank space fixes this.
/(\w+)\W*?(\w+)\W*(\w)?/

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*women.pm

Replies are listed 'Best First'.
Re^3: Newbie parsing problem
by vaticide (Scribe) on Jan 25, 2007 at 16:47 UTC
    Thanks, I noticed that, too, when I changed it to plug into the test case. Fairly embarrasing considering I do name parsing such as this regularly at work!
      great solutions, I have noticed that:
      my ($last, $first, $middle) = ($name =~ /(\w+)\W*?(\w+)\W*(\w)?/);
      doesn't handle lastnames with hypens in them, any ideas? thanks again!
        \w only matches letters, digits and underscores. since the hyphen is a non-word (\W), that regex interprets it as a separator, so that the second part of the last name is considered the first name.
        the following code supports hyphenated first and last names:
        my ($last, $first, $middle) = ($name =~ /([\w-]+)\W*?([\w-]+)\W*(\w)?/);

        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        *women.pm