2016-01-02 163 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”。 然后,您可以将最后两个字符的子字符串传递给您的状态变量。

如果你想要但是一个更好的答案,我建议正则表达式捕捉组。我会让你一个,但你没有给我足够的样本数据。