Regex PHP,邮政地址


Regex PHP , postal address

我知道邮政地址上的regex不可能是最优的,但我在这里确实是最优的。

我解释了我的问题:我得到了不同类型的邮政地址:

  • 32 Rue Jean Jaures 69000 Lyon
  • Bâtiment 1 32 Rue Jean Jaures 69000 Lyon
  • 32 B Jean Jaures 69000 Lyon
  • Bâtiment 1 32 B Rue Jean Jaures 69000 Lyon

我需要一个正则表达式来只查找任何位置的街道编号。

我做了一个regexp,它允许在字符串的开头确定数字:

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

你可以在这里看到结果:https://regex101.com/r/dY7cE6/3

但问题是,如果它不是我字符串的第一个数字,我就找不到它(比如这个地址:Bâtiment132 Rue Jean Jaures 69000 Lyon(

所以我请求你在任何情况下都能找到这条街的号码,它在这里是"32"。

我一直在自己寻找,但会很感激你的帮助。

谢谢。

字符串中的最后一个数字,除非是5位数字,可选地在数字后面捕获一个字母:

^.*'b(?!'d{5}[A-Z]?'b)('d+(?:'s*[A-Z]'b)?)

下面的正则表达式将查找字符串中倒数第二个数字(在捕获组中(。如果这个数字后面有一个字母(是否用空格分隔(,它也会捕捉到这个数字。

它要求字符串中的最后一个数字是五位数的邮政编码:

/('d+(?:'s*'w'b)?)[^'d]+'d{5}[^'d]+$/

然而,您需要如何可靠地识别门牌号码?输入数据的可能范围是多少?没有正则表达式方法可能是非常好的。这个问题和答案给出了一些问题的概念。

查看它对示例数据的处理。

'b(?!'d{5}'b)'d+'b(?:'s*'w'b)?(?='D*'b'd{5}'b|'D*$)

试试这个。请参阅演示。

https://regex101.com/r/cJ6zQ3/20