如果数字存在则正则表达式

时间:2018-01-16 13:45:25

标签: php regex

我正在搜索php正则表达式来拆分街道和门牌号码,但是当地址没有门牌号时,它应该只提供街道名称。

我有这个:

/([^\d]+)\s?(.+)/i

它有效,但当地址没有门牌号码时,它会从街道名称中拆分最后一个字母。

这是我的代码:

$result = mysqli_query($db, "SELECT street FROM branch;");
$row = mysqli_fetch_assoc();

while($row = mysqli_fetch_assoc($result))
{
    if ( preg_match('/([^\d]+)\s?(.+)/i', $row['street'], $street) )
    {
       $streetName = $street[1];
       $streetNumber = $street[2];
       echo $streetName;
       echo "<br />";
    }
}

地址示例: UL.JANA PAWLA,UL.GDANSKA 83A,UL.MOSTOWA 5

1 个答案:

答案 0 :(得分:1)

认为你要做的是:

  

The Limes 45

变为:

  街道:The Limes
  数量:45

问题在于,如果数据是:

  

Goblins Only Street

您的输出不正确。

  

街道:仅限Globins   数量:街道

因此:试试这个正则表达式:

  \s?([^\d]+\s)\s?(\d+.*)*

它的作用:

  • 如果不是,则会将所有非数字值收集为第一组(街道)
  • 如果在该点之后存在的数字,则将数字和所有后续字符收集为第二组。

输入:

  

The Limes

输出:

 Street: The Limes  

输入:

  

The Limes 45

输出:

 Street: The Limes  
 Number: 45

输入:

  

The Limes 45B

输出:

 Street: The Limes  
 Number: 45B