Php 将完整的美国街道地址解析为地址、城市、州、邮政编码

Php 将完整的美国街道地址解析为地址、城市、州、邮政编码,php,regex,preg-match,Php,Regex,Preg Match,我的地址每次都采用这种格式: 地址,城市,州邮编 示例:加利福尼亚州Testville 555路试驾98773 我想将地址解析为单独的变量,用于: 地址 城市 陈述 拉链 我尝试了一些preg_match示例,但它们不遵循我使用的相同模式。我要找的是regex还是preg_match?请帮忙 你可以想出这样的办法: (?P<address>[^,]+),\h+ (?P<city>[^,]+),\h+ (?P<state>\w+)\s+ (?P<zip

我的地址每次都采用这种格式:

地址,城市,州邮编

示例:加利福尼亚州Testville 555路试驾98773

我想将地址解析为单独的变量,用于:

  • 地址
  • 城市
  • 陈述
  • 拉链

我尝试了一些preg_match示例,但它们不遵循我使用的相同模式。我要找的是regex还是preg_match?请帮忙

你可以想出这样的办法:

(?P<address>[^,]+),\h+
(?P<city>[^,]+),\h+
(?P<state>\w+)\s+
(?P<zip>\w+)
请参阅。

但是,如果逗号不总是在那里,这可能会变得非常混乱(请提供更多的输入字符串)。

您可以想出如下方法:

(?P<address>[^,]+),\h+
(?P<city>[^,]+),\h+
(?P<state>\w+)\s+
(?P<zip>\w+)
请参阅。

但是,如果逗号不总是在那里,这可能会变得非常混乱(请提供更多的输入字符串)。

如果您是绝对肯定的,则地址的格式将始终与您的示例一样,使用这些逗号,您有两个简单的选项

选项1:正则表达式 现在您有了自己的地址变量

工作示例:

选项2:爆炸
您还可以使用
explode()
将地址拆分为若干部分:

list($street, $city, $statezip) = explode(", ", $address);
list($state, $zip) = explode(" ", $statezip);

工作示例:

如果您是绝对肯定的,则地址的格式将始终与您的示例相同,使用这些逗号,您有两个简单的选项

选项1:正则表达式 现在您有了自己的地址变量

工作示例:

选项2:爆炸
您还可以使用
explode()
将地址拆分为若干部分:

list($street, $city, $statezip) = explode(", ", $address);
list($state, $zip) = explode(" ", $statezip);

工作示例:

您还可以使用
explode()

$full_address='555加州Testville路试98773';
$address=explode(“,”,$full_address)[0];
$city=explode(“,”,$full_address)[1];
$state=explode(“”,trim(explode(‘,’,$full_address)[2])[0];
$zip=explode(“”,trim(explode(‘,’,$full_address)[2])[1];
回显$address.“
”; echo$city.“
”; 回显$state。“
”; echo$zip;
您也可以使用
explode()

$full_address='555加州Testville路试98773';
$address=explode(“,”,$full_address)[0];
$city=explode(“,”,$full_address)[1];
$state=explode(“”,trim(explode(‘,’,$full_address)[2])[0];
$zip=explode(“”,trim(explode(‘,’,$full_address)[2])[1];
回显$address.“
”; echo$city.“
”; 回显$state。“
”; echo$zip;
我在这里看到的模式是
文本,文本,文本文本
。可以使用
(.*)、(.*)、(.*)(.*)(.*)
捕获。可以在不同的变量中捕获四个组。我在这里看到的模式是
text,text,text-text
。可以使用
(.*)、(.*)、(.*)(.*)(.*)
捕获。四个组可以在不同的变量中捕获。这不适用于以下地址“5957 HWY 45,8英里,AL 36613”。任何建议,代码对其他地址都适用,但2句城市导致未定义的偏移错误。这不适用于以下地址“5957 HWY 45,8英里,AL 36613”任何建议,该代码在其他代码上运行良好,但2语句会导致未定义的偏移量错误
$full_address = '555 Test Drive, Testville, CA 98773';

$address = explode(',', $full_address)[0];
$city = explode(',', $full_address)[1];
$state = explode(' ', trim(explode(',', $full_address)[2]))[0];
$zip = explode(' ', trim(explode(',', $full_address)[2]))[1];

echo $address.'<br>';
echo $city.'<br>';
echo $state.'<br>';
echo $zip;