从地址字符串中提取门牌号码

时间:2013-08-06 13:19:27

标签: php regex street-address

我正在根据需要从外部数据库导入用户数据。虽然我将门牌号与街道名称分开,但另一个数据库却没有。

我用

preg_match_all('!\d+!')

排除数字。这适用于这样的地址行:

streetname 60

但它不适用于这样的地址行:

streetname 60/2/3

在这种情况下,我最终提取60,并且/ 2/3留在街道的名称。

不幸的是,我不是一名正则表达式专家。恰恰相反。我的问题是我不仅需要能够检测数字,还能检测斜线和连字符。

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:4)

尝试:

preg_match_all('![0-9/-]+!', 'streetname 60/2/3', $matches);

答案 1 :(得分:0)

要给出一个明确的答案,我们必须知道数据中的模式。

例如,在德国,我们有时会使用13a23-42这样的门牌号,也可以写成23 - 42

一个可能的解决方案是在以数字开头的空白后匹配所有

preg_match_all('!\s(\d.*)!', 'streetname 60/2/3', $matches);
但是,如果你有像13street

这样的街道的美国数据,那么这会产生误报