2015-10-05 157 views
0

我解释我的问题:我正在不同的地址正则表达式PHP,查找特定位置的字符

" 25 Down Street 15000 London " 

" 25 B Down Street 15000 London " 

" Building A 25 Down Street 15000 London " 

我找到了一种方法来确定这是街道上的这一切情况的数量正则表达式:

`^([1-9][0-9]{0,2}(?:\s*[A-Z])?)\b` 

但现在我得到了我解决不了问题,当情况是真实的,以确定哪些是街道的号码前加字,我需要。

例:“2号楼 25在街上15000伦敦”我需要在这里找只我明白,我有这个字符串的第一个数字之前找到字符“2号楼”

继续搜索我自己,但会很好,如果有人得到了我的解决方案。

谢谢。

编辑我的代码现在是:

preg_match('/^(.*?)\d+\s+\D+/', $cleanAdressNode, $result, PREG_OFFSET_CAPTURE,0); 
     print $result[0][0]; 

     return $result[0][0]; 

和现在的结果是:住宅之尔姆1 15大道让·饶勒斯,而不是唯一的:住宅之尔姆1

+0

使用正则表达式匹配地址几乎是不可能的......需要一个专门构建的系统来确定字符串中每个标记的含义。 –

回答

1

如何:

preg_match('/^(\D*)/', $str, $match); 

你会发现在$match[1]不是在字符串开头的数字。

根据你的例子:

preg_match('/^(.*?)\d+\s+\D+/', $str, $match); 
+0

我找到了一个方法来看看这个:https://regex101.com/r/nU5tA7/1 但我的新问题是,我可以有特殊字符,如“é”或“ç”和我的正则表达式不'再看看这个例子:https://regex101.com/r/yB1hI0/1也许你可以帮助我呢? – VERYNET

+0

@VERYNET:看我的编辑。 – Toto

+0

@VERYNET:没有看到您的代码,我无法帮助您。编辑您的问题添加代码的相关部分,一些示例输入字符串和预期结果。 – Toto

0

如果你只是想匹配的第一个非数字字符,^([^0-9]*)应该做的伎俩。它使用类否定来获取字符串开始处的每个非数字字符。

+0

我找到了一个方法来看看这个:regex101.com/r/nU5tA7/1但我的新问题是,我可以有像“é”或“ç”的特殊字符,我的正则表达式不再适用于此看看这个例子:regex101.com/r/yB1hI0/1也许你可以帮助我呢? – VERYNET

+0

在这里,您正在寻找两个“Résidenceles Thermes 1”和“25 B Boulevard Emile Zola 13100 Aix en Provence”的团队吗? – Aaron

+0

仅适用于:“Résidenceles Thermes 1”,它是唯一的匹配 – VERYNET