Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式将字符串分解为名字、姓氏和位置_Php_Regex_Preg Match - Fatal编程技术网

Php 正则表达式将字符串分解为名字、姓氏和位置

Php 正则表达式将字符串分解为名字、姓氏和位置,php,regex,preg-match,Php,Regex,Preg Match,我有一些人的记录,我想通过以下方式对信息进行细分: 括号内的任何内容都可以视为位置 姓 最后一个词-不包括上面的位置 名字将是 姓氏之前的一切 这里可能有一些不正确的假设,即单词姓氏。我正在寻找使用正则表达式来做大量的工作,我会不断地从中得到一些想法。正则表达式的实现将使用PHP 以下是一些示例记录: Sam Leicester Sam Christopher Leicester Sam Leicester (London) Sam Christopher Leicester (France

我有一些人的记录,我想通过以下方式对信息进行细分:

  • 括号内的任何内容都可以视为位置
  • 姓 最后一个词-不包括上面的位置
  • 名字将是 姓氏之前的一切
这里可能有一些不正确的假设,即单词姓氏。我正在寻找使用正则表达式来做大量的工作,我会不断地从中得到一些想法。正则表达式的实现将使用PHP

以下是一些示例记录:

Sam Leicester
Sam Christopher Leicester
Sam Leicester (London)
Sam Christopher Leicester (France)

到目前为止,我已经制作了这个程序,它将名称解析成一个数组(很容易使用最后一个元素作为姓氏,其余元素作为firstname加入),并为位置创建一个recond组。虽然我似乎还不喜欢用它来实现它。

您可以使用这个正则表达式:

/^(.*)\s(\w+)(?:\s\((\w+)\))?$/


第一个捕获组
(.*)
尝试匹配任何内容。这使发动机能够回溯。如果括号中没有位置,我们只需匹配姓氏(
(\w+
)和escape,否则我们将匹配姓氏(\w+)和两个捕获组中的位置。

您可以使用此正则表达式:

/^(.*)\s(\w+)(?:\s\((\w+)\))?$/


第一个捕获组
(.*)
尝试匹配任何内容。这使发动机能够回溯。如果括号中没有位置,我们只需匹配姓氏(
(\w+)
)和escape,否则我们将匹配姓氏(\w+)和两个捕获组中的位置。

您可以使用命名组来简化生活,并使用这样的regexp:

/^(?P<name>\w+ (?:\w+ )*?)(?P<secondName>\w+(?: |$))?(?:\((?P<location>\w+)\))?$/m

当用户仅指定名称和位置时,此regexp也能正常工作。

您可以使用命名组来简化工作,并使用此类regexp:

/^(?P<name>\w+ (?:\w+ )*?)(?P<secondName>\w+(?: |$))?(?:\((?P<location>\w+)\))?$/m

当用户仅指定名称和位置时,此regexp也能正常工作。

对于那些普通的regex用户,我希望这是一次公园漫步,但希望能帮助我和其他人学习,因为姓氏和位置是可以互换的,所以不可能从逻辑上确定它是姓氏还是位置,除非你有一个所有可能位置的大列表……或者莱斯特是姓氏?!是的,不用考虑我的原因,以我自己为例,莱斯特是我的姓:-)位置总是放在括号中。对于雷格克斯的普通人,我希望这是在公园里散步,但希望能帮助我和其他人学习,因为姓氏和位置是可以互换的,所以不可能从逻辑上确定它是姓氏还是位置,除非你有一个所有可能位置的大列表……或者莱斯特是姓氏?!是的,不用考虑我造成的混乱,以我自己为例,莱斯特是我的姓:-)位置总是用括号表示。