2016-01-02 162 views
0
Address Street - Name, LLC - City, GA 
Address Street Name - Name NameLast - City Name, SC 
Address-Street-Name - Name Last - City Name, NC 

上面是示例數據,我有大約20個,我循環,並注入數據庫。我以前使用過' - '','爆炸,直到「Name,LLC」出現爲止。解析困難

如何正確解析以上內容? (注意額外的逗號有可能在名稱)

+0

確保返回的數據可以以可預測的方式進行分析。語法是否定義? –

+1

有沒有什麼話說反對使用'' - ''作爲分隔符,然後(可選)再次用''分隔'最後一個字段'(如果你需要狀態作爲單獨的字段)? – helmbert

+0

多麼糟糕的數據集。 – MarkM

回答

1
$string = "Address Street - Name, LLC - City, GA 
Address Street Name - Name NameLast - City Name, SC 
Address-Street-Name - Name Last - City Name, NC"; 

$regex = "/(.*?) - (.*?)$/m"; 

preg_match_all($regex, $string, $matches); 

var_dump($matches); 

對於您給我們的數據,此工作正常。因爲你剛剛發佈了3套,我不能確定它是否始終有效。

此正則表達式匹配,直到第一個-前後有一個空格。秒捕捉組然後匹配所有字符,直到行的結尾。

0

使用字符串()來傳遞的前n - 4個字符爆炸,另一個子()調用的最後兩個字符傳遞給你的狀態變量

它看起來像你遇到一個你想用來解析的逗號的唯一時間是在每個條目的末尾,在狀態縮寫之前。 由於這只是最後四個字符(逗號,空格和2個字符的首字母縮寫詞),因此您可以簡單地傳遞每個條目的長度爲strlen - 4的子字符串以使其爆炸。這實際上會削減每個條目中的「,CA」。 然後,您可以將最後兩個字符的子字符串傳遞給您的狀態變量。

如果你想要但是一個更好的答案,我建議正則表達式捕捉組。我會讓你一個,但你沒有給我足夠的樣本數據。