<?php
function old_intelligent_street_data($street)
{
    
$a preg_split('/[\.\s]*(([0-9\/\s]+)|([0-9]+)([\w]+))$/',$street,2,PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
    return array(
"name" => $a[0],"number" => $a[1]);
}

/**
 * Get the street name and street number out of a given mixture of both
 *
 * @param string street
 * @return array associative array(name => Street name, number => Street number)
 **/
function intelligent_street_data($street)
{
    
$a preg_split('/([0-9\/\s]+)/',$street,-1,PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
    
    
    
$number "";
    
$name "";
    
$n false;
    
    while (
$part array_pop($a)) {
        if (
is_numeric(preg_replace('/[\s\/]*/',"",$part)) && !$n) {
            
$number $part.$number;
            
$n true;
           
        } else {
            if (
$n) {
                
$name $part.$name;
            } else {
                
$number $part.$number;
            }
        } 
//~ end if else
    
//~ end while

    
return array("name" => trim($name),"number" => trim($number));
}



//~ some example code

$streets = array(
                    
"Einsteinstr.34",
                    
"Im Graben 6",
                    
"Karlstraße 56",
                    
"Pfuscherweg8",
                    
"Auf der Schanz 26a",
                    
"Auf der Schanz 26 a",
                    
"Hochhaus 34/1",
                    
"doofes Hochhaus 34 / 2",
                    
"Dumme 123 Straße42",
                    
"doofer25ster Querweg 2",
                    
"Da-geht-nix-Straße 22 oberer Stock"
                    
);

?>
<pre>
Original:
<?print_r($streets);?>

Filtered:
<?php
foreach($streets AS $street) {
    
$a intelligent_street_data($street);

    echo 
"Street name:    ".$a["name"]."\n";
    echo 
"Street number:    ".$a["number"]."\n";
    echo 
"\n";
    


}
?>
</pre>