我正在尝试使用具有尾随凭据的全名来查找姓氏。某些名称具有中间名或缩写,带连字符的名称,多个凭据,而某些名称没有尾随凭据:
我已经开始了
/\w+(?=[\s,]+\S*$)/gmi
获取前2个格式的姓氏,但分别获取第1个凭据和第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];
}
上面的代码可以进行优化,但我希望尽可能自我解释。
注意:这仅适用于您提到的格式后面的名称。如果您要获得三个以上的名字,那么您就会遇到问题,因为您将无法确定它是否是双重的第一,中间或姓氏。