我想拆分一个字符串。
- 它包括编号,名称和城市
示例:2E4 766 06 7982 647 5 约瑟夫·桑切斯·祖尼
- 2E4 766 06 7982 647 5 是参考编号。
- 约瑟夫·桑切斯的名字
- 祖尼是城市
分离名称和城市很困难,但我正在尝试将 Ref No 和 Name(NAme City)分开。我形成了一个正则表达式并对其进行了测试:http://www.switchplane.com/awesome/preg-match-regular-expression-tester/?pattern=%22%5Ba-zA-Z%5D%5Ba-z%5Cs.%5D%22&subject=2E4+766+06+7982+647+5+Joesph+J+Sanchez+Zuni
我通过认为名称将始终以大写字母开头,并将后跟一个小字母或空格或点来形成它
但是当我使用
$keywords = preg_split("[a-zA-Z][a-zs.]", $strBreak['cust_ref']);
它不起作用。
请指导。
正则表达式:
'#(?P<ref>.+d) (?P<name>w+ [A-Z ]*w+) (?P<city>.+)#'
- 首先捕获名称之前以单个数字结尾的任何内容。我不确定这是否正确,因为缺乏参考编号的示例/格式。如果不正确,请删除".+"和"\d"之间的空格。在数组中使用键"ref"存储。
- 捕获具有 0 个或多个中间名的名称。在数组中使用键"名称"存储。
- 捕获名称后的任何内容作为城市名称。与数组中的键"城市"一起存储。
试试这个:
$vars = array(
'2E4 766 06 7982 647 5 Joesph Sanchez Zuni',
'2E4 766 06 7982 647 5 Joesph J Sanchez Zuni',
'2E4 766 06 7982 647 5 Joesph J G Sanchez Zuni',
'2E4 766 06 7982 647 5 Joesph Sanchez Los Angeles',
'2E4 766 06 7982 647 5 Joesph J Sanchez Los Angeles',
'2E4 766 06 7982 647 5 Joesph J G Sanchez Los Angeles',
'2E4 766 06 7982 647 5 Joesph Sanchez St. Morel',
'2E4 766 06 7982 647 5 Joesph J Sanchez St. Morel',
'2E4 766 06 7982 647 5 Joesph J G Sanchez St. Morel',
);
$matches = array();
foreach ($vars as $var) {
if (preg_match('#(?P<ref>.+ d) (?P<name>w+ [A-Z ]*w+) (?P<city>.+)#', $var, $matches)) {
echo 'Ref: ', $matches['ref'], '. Name: ', $matches['name'], '. City: ', $matches['city'], "n";
} else {
echo "No match for $varn";
}
}
结果:
Ref: 2E4 766 06 7982 647 5. Name: Joesph Sanchez. City: Zuni
Ref: 2E4 766 06 7982 647 5. Name: Joesph J Sanchez. City: Zuni
Ref: 2E4 766 06 7982 647 5. Name: Joesph J G Sanchez. City: Zuni
Ref: 2E4 766 06 7982 647 5. Name: Joesph Sanchez. City: Los Angeles
Ref: 2E4 766 06 7982 647 5. Name: Joesph J Sanchez. City: Los Angeles
Ref: 2E4 766 06 7982 647 5. Name: Joesph J G Sanchez. City: Los Angeles
Ref: 2E4 766 06 7982 647 5. Name: Joesph Sanchez. City: St. Morel
Ref: 2E4 766 06 7982 647 5. Name: Joesph J Sanchez. City: St. Morel
Ref: 2E4 766 06 7982 647 5. Name: Joesph J G Sanchez. City: St. Morel