Php 反向Firstname-Lastname模式的正则表达式

Php 反向Firstname-Lastname模式的正则表达式,php,regex,Php,Regex,我已经在这个问题上纠缠了一段时间了;我必须从下面的示例字符串中获取姓氏和标题 1.LASTNAME/FIRSTNAME MIDDLENAME1 MIDDLENAME2 MIDDLENAME3。。米德尔纳明头衔 FIRSTNAME和MIDDLENAME可能不存在 现在标题只能是这些值之一MR/MISS/MRS/MSTR/MASTER;或者它可以像名字和中间名一样是空白的 (?<number>\d+)\.(?<surname>[a-z\s]*)\/((?<firstna

我已经在这个问题上纠缠了一段时间了;我必须从下面的示例字符串中获取姓氏和标题

1.LASTNAME/FIRSTNAME MIDDLENAME1 MIDDLENAME2 MIDDLENAME3。。米德尔纳明头衔

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

(?<number>\d+)\.(?<surname>[a-z\s]*)\/((?<firstname>[a-z]+\s{0,1}))*(?<title>mrs|mr|miss|mstr|master){0,1}
(?\d+)\(?[a-z\s]*)\/((?[a-z]+\s{0,1}))*(?[a-z]+\s{0,1})女士{0,1}
在PHP中,preg_match不起作用,因为firstname组不捕获多个值


如果我没有遗漏一些东西,我怎么能只通过正则表达式来做到这一点呢

$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";
$str='1.LASTNAME/FIRSTNAME MIDDLENAME1 MIDDLENAME2 MIDDLENAME3 TITLE';
预匹配('/^(?\d+)\.\s*(?[^\s\/]+)\s*/?\s*(?[^\s]+)(.*?([^\s]+)$/,$str,$matches);
echo“\$str:$str\n\n”;
echo“number:{$matches['number']}\n”;
echo“title:{$matches['title']}\n”;
echo“name:{$matches['name']}\n”;
echo“姓氏:{$matches['names']}\n”;

如果我没有遗漏什么

$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";
$str='1.LASTNAME/FIRSTNAME MIDDLENAME1 MIDDLENAME2 MIDDLENAME3 TITLE';
预匹配('/^(?\d+)\.\s*(?[^\s\/]+)\s*/?\s*(?[^\s]+)(.*?([^\s]+)$/,$str,$matches);
echo“\$str:$str\n\n”;
echo“number:{$matches['number']}\n”;
echo“title:{$matches['title']}\n”;
echo“name:{$matches['name']}\n”;
echo“姓氏:{$matches['names']}\n”;

提示:
{0,1}
相同。我知道。。。但这有助于我更好地思考!!试图将人们的名字强制加入一个僵化的方案通常不太好…提示:
{0,1}
相同。我知道。。。但这有助于我更好地思考!!试图强迫人们的名字进入一个僵化的方案通常不太管用。。。