正则表达式以“名字姓氏,凭证”格式查找姓氏

时间:2017-04-20 13:29:15

标签: php regex

我正在尝试使用具有尾随凭据的全名来查找姓氏。某些名称具有中间名或缩写,带连字符的名称,多个凭据,而某些名称没有尾随凭据:

  • John Doe,MD
  • Jane X. Doe,FNP-C
  • Joe Cool,医学博士,博士
  • Billie-Jo Last

我已经开始了

/\w+(?=[\s,]+\S*$)/gmi

获取前2个格式的姓氏,但分别获取第1个凭据和第2个格式的名字。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

如果您的所有输入都按照您的描述进行了良好的结构化,那么最好的建议是做@Magnus Eriksson在他的表述中所说的内容。代码非常简单:

$parts = explode(',', $inputString);
$names = explode(' ', trim($parts[0]));
$lastName = $names[count($names) - 1];

答案 1 :(得分:1)

如果您100%确信他们都遵循您发布的格式,您可以每行(每人)执行此操作:

// Get the names part of the string
$parts = exlode(',', $nameString);

// The first element is the names.
// Now, split the name string to get the names
$names = explode(' ', $parts[0]);

$first  = $names[0];
$middle = null;
$last   = null;

if (count($names) == 2) {
    // We only have two names, which probably means that
    // the second is the last name
    $last = $names[1];
}

if (count($names) == 3) {
    // We got three names, let's assume that the second is the middle name
    $middle = $names[1];

    // And the third is the last name
    $last = $names[2];
}

上面的代码可以进行优化,但我希望尽可能自我解释。

注意:这仅适用于您提到的格式后面的名称。如果您要获得三个以上的名字,那么您就会遇到问题,因为您将无法确定它是否是双重的第一,中间或姓氏。