反向名字姓氏模式的正则表达式

时间:2012-03-17 17:06:37

标签: php regex

我一直坚持这个问题已经有一段时间了;我必须从以下示例字符串

中捕获最后的名字和标题

1.LASTNAME / FIRSTNAME MIDDLENAME1 MIDDLENAME2 MIDDLENAME3 .. MIDDLENAMEn TITLE

FIRSTNAME和MIDDLENAME可能不存在 现在TITLE只能是MR / MISS / MRS / MSTR / MASTER这些值中的一个;或者它可以像FIRSTNAME和MIDDLENAME一样空白

(?<number>\d+)\.(?<surname>[a-z\s]*)\/((?<firstname>[a-z]+\s{0,1}))*(?<title>mrs|mr|miss|mstr|master){0,1}

在PHP中,preg_match没有这个技巧,因为firstname组不会捕获多个值

我怎么能通过正则表达式来做到这一点?

1 个答案:

答案 0 :(得分:0)

如果我没有遗漏某些东西......

$str = '1.LASTNAME/FIRSTNAME MIDDLENAME1 MIDDLENAME2 MIDDLENAME3 TITLE';
preg_match('/^(?<number>\d+)\.\s*(?<surname>[^\s\/]+)\s*\/?\s*(?<name>[^\s]+)?(.*?)(?<title>[^\s]+)$/',$str,$matches);

echo "\$str: $str\n\n";
echo "number: {$matches['number']}\n";
echo "title: {$matches['title']}\n";
echo "name: {$matches['name']}\n";
echo "surname: {$matches['surname']}\n";