2013-08-06 39 views
0

我正在根據需要從外國數據庫中導入用戶數據。雖然我將房屋號碼與街道名稱分開,但其他數據庫卻沒有。從地址字符串中提取門牌號碼

我用

preg_match_all('!\d+!') 

要排除的號碼。這工作正常,像這樣的addressline:

streetname 60 

但它並不適用於像這樣的addressline工作:

streetname 60/2/3 

在這種情況下,我最終提取60,和/ 2/3留在街道的名字。

不幸的是,我不是一個正則表達式的專家。恰恰相反。我的問題是,我需要能夠不僅檢測數字,而且斜線和連字符。

有人可以幫我嗎?

回答

4

嘗試:

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

+0

非常完美! – SquareCat

+0

@CummanderCheckov你「理解」表達式是如何工作的? – HamZa

+0

是的,在這種情況下它很簡單。雖然我不知道呼號是什麼。 – SquareCat

0

給出一個明確的答案,我們必須知道在你的數據的模式。

例如,在德國,我們有時有門牌號碼一樣13a23-42,這也可以被寫爲23 - 42

一個可能的解決方案以數字開頭的空白後一切匹配

preg_match_all('!\s(\d.*)!', 'streetname 60/2/3', $matches); 

這會產生誤報,不過,如果你有街道美國數據,如13street

+0

這是非常好的輸入。因爲我主要處理德國,奧地利和瑞士的街道名稱。但是,使用空格作爲指示符的問題在於它也可能出現在街道名稱中。也許有一種方法可以使用第一個數字之前的最後一個空格作爲指示符? – SquareCat

+0

這將完全匹配:空格,數字以及數字後面的所有內容,直到結尾。以數字開頭的所有內容都將被視爲組的一部分並放入'$ matches [1]'(如果沒有設置標誌) – cypherabe