Php MYSQL在表中查找与字符串的多个子字符串中的最佳子字符串匹配的值

Php MYSQL在表中查找与字符串的多个子字符串中的最佳子字符串匹配的值,php,mysql,sql,Php,Mysql,Sql,我有一张佛罗里达州所有市政当局的桌子。和许多州一样,我们的城市都有相同的根名称,但都是由方向唯一标识的。例如,我们有一个城市叫“棕榈滩”,我们有一个完全不同的城市叫“西棕榈滩” 我从.xls文件中提取了一个字符串,如下所示: 3333佛罗里达州西棕榈滩第10街北201号,邮编34103 我想把绳子分成两段,第2段应该从西棕榈滩开始。因为如果我能识别城市,那么就很容易将段2分割成城市/州/ZIPCODE 我(意思是PHP)不知道城市在这个字符串中的位置(这是我的问题的一部分,因为字符串段在字符串

我有一张佛罗里达州所有市政当局的桌子。和许多州一样,我们的城市都有相同的根名称,但都是由方向唯一标识的。例如,我们有一个城市叫“棕榈滩”,我们有一个完全不同的城市叫“西棕榈滩”

我从.xls文件中提取了一个字符串,如下所示:

3333佛罗里达州西棕榈滩第10街北201号,邮编34103

我想把绳子分成两段,第2段应该从西棕榈滩开始。因为如果我能识别城市,那么就很容易将段2分割成城市/州/ZIPCODE

我(意思是PHP)不知道城市在这个字符串中的位置(这是我的问题的一部分,因为字符串段在字符串之间是不同的——有些有逗号,有些没有逗号,所以我不能真正依靠逗号分隔来识别子字符串段)

例如,电子表格可能很容易有一行如下所示:

佛罗里达州西棕榈滩第10街3333号,北纬201号,邮编34103(注意缺少逗号)

这就是为什么我要搜索一个表来匹配一个城市子字符串,因为我不能信任逗号分隔或空格分隔字符串的结果来获得子字符串的最后三部分,城市状态ZIP

我需要确定匹配西棕榈滩,但不是从表棕榈滩


我如何使用我的市镇名称表来识别字符串中的城市是“西棕榈滩”而不是“棕榈滩”?

由于数据是非标准化的,我只需从字符串末尾提取邮政编码并进行查找。您可以使用以下正则表达式从字符串末尾提取邮政编码:

/(\d{5}(?:-d{4})?)$/
Regex演示:(如果拉链永远是我们的,那么国际拉链的结构会有所不同;)

或者,如果地址的街道部分始终以逗号结尾,则可以使用:

\h([A-Z ]+)[,\h]+([A-Z]{2})\h+(\d{5}(?:-d{4})?)$
这将匹配城市、州和邮政编码


演示2:

邮政编码是否始终是最后一个值?我会在上面查找城市名称。@chris85邮政编码总是字符串的最后一部分。我可以使用邮政编码查找,但这会打开一整罐蠕虫!邮政编码查找在历史上处于不断变化的状态。但是这个建议有很强的优点。我将对此进行研究,这可能是一个解决方案。@chris85好吧,这里的邮政编码查找可能就是答案。或者。。。城市和州之间是否缺少逗号?可能的正则表达式方法。如果这些是唯一的偏差。@chris85我有25000条记录,地址输入字段的方式是不可靠的。有些城市和州用逗号隔开,有些则不用逗号。因此,我必须找到一种可靠的方法来挑选最后三部分:城市州邮政编码。我想我应该搜索city子字符串,但多亏了你,我下载了city&county的邮政编码查询。邮政编码始终是最后一段,我认为这就是解决方案。学习regex示例,但同时使用邮政编码查找。幸运的是,免费的邮政编码/城市/县表格是免费提供的。