Ankündigung

Einklappen
Keine Ankündigung bisher.

reguläre Ausdrücke hilfe

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • reguläre Ausdrücke hilfe

    Hallo @alle

    Ich habe in Internet diese Funktion gefunden,um die Hausnummer von der Strasse bei deutschen Adressen zu trennen.
    Jetzt brauche ich mal hilfe bei Adressen z.b Frankreich.
    Dort stehen ja die Hausnummer vorne und reguläre Ausdrücke ist irgendwie nicht mein Ding.
    Was muss ich ändern in der Funktion ,damit es auch bei Frankreich adressen geht,das die Hausnummer unter street_number erscheint

    PHP-Code:
    function splitStreet_mod($street) {
       if(
    preg_match("/^([^0-9]+)([0-9]+[ ])*[ \t]*([0-9]*[-\w^.]*)?[, \t]*([^0-9]+.*)?\$/"$street$matches)){
          if(
    preg_match("/^([0-9]+)?\$/"trim($matches[2]))) {
             
    $matches[1] = $matches[1] . $matches[2];
            }
          return array(
                 
    'street_name' => trim($matches[1]),
                 
    'street_number' => isset($matches[3]) ? $matches[3] : '',
                 
    'care_of' => isset($matches[4]) ? trim($matches[4]) : '',
                 
    'schluss' => isset($matches[5]) ? trim($matches[5]) : ''
                 
    );
         }

    gruß
    Martin


  • #2
    Hallo kann es sein , das ich es nur so ändern muss

    PHP-Code:
    function splitStreet_mod_FR($street) {
       if(
    preg_match("/^([0-9]+)([^0-9]+[ ])*[ \t]*([0-9]*[-\w^.]*)?[, \t]*([^0-9]+.*)?\$/"$street$matches)){
          
    print_r($matches);
          }
         if (
    preg_match("/^([0-9]+)?\$/"trim($matches[1]))) {
               
    $matches[2] = $matches[2] . $matches[3];
           }
           return array(
                  
    'street_name' => trim($matches[2]),
                  
    'street_number' => isset($matches[1]) ? $matches[1] : '',
                  
    'care_of' => isset($matches[4]) ? trim($matches[4]) : '',
                  
    'schluss' => isset($matches[5]) ? trim($matches[5]) : ''
                  
    );
       } 

    Kommentar


    • #3
      Was soll die ursprüngliche Funktion alles matchen? Stock, Stiege, etc.? Wie siehts mit Zahlbereichen aus? Was ist mit Buchstaben an der Hausnummer bzw. Türnummer?
      Und dann das ganze nochmal für Frankreich. Wenn du da keine Beispiele/Tests/Spezifikationen hast wirst du da wohl kein Glück haben.

      Kommentar


      • #4
        Hallo
        Die erste Funktion soll die Strasse von den Rest trennen, das klappt auch.
        Mein Problem ist eben , ich komme nicht mit reguläre Ausdrücke klar
        Beispiele habe ich genug, die Daten kommen von Amazon und dort stehen die Daten Strasse und Hausnummer in einer Zeile, für Intraship brauche ich es aber getrennt.
        In den Fall Frankreich sieht es ja so z.b. aus
        146, chemin de la montagne
        und es sieht bis jetzt so aus
        PHP-Code:
        function splitStreet_mod_FR($street) {
           
        $street str_replace(","" "$street);
           if(
        preg_match("/^([0-9]+)([^0-9]+[ ])*[ \t]*([0-9]*[-\w^.]*)?[, \t]*([^0-9]+.*)?\$/"$street$matches)){
              if(
        preg_match("/^([0-9]+)?\$/"trim($matches[1]))) {
                   
        $matches[2] = ucfirst($matches[2]) . ucfirst($matches[3]);
                 }
                  return array(
                      
        'street_name' => trim(ucfirst($matches[2])),
                      
        'street_number' => isset($matches[1]) ? $matches[1] : '',
                      
        'care_of' => isset($matches[4]) ? trim(ucfirst($matches[4])) : '',
                      
        'schluss' => isset($matches[5]) ? trim(ucfirst($matches[5])) : ''
                      
        );
               }
               return array(
                        
        'street_name' => ucfirst($street),
                        
        'street_number' => '',
                        
        'care_of' => '',
                        
        'schluss' => ''
                        
        );
            } 
        Gruß
        Martin

        Kommentar


        • #5
          Zitat von Nordlicht11180 Beitrag anzeigen
          Die erste Funktion soll die Strasse von den Rest trennen, das klappt auch.
          Das sagtest du bereits. Ich habe Nachfragen gestellt die du nicht beantwortet hast. Zusätzlich wäre es noch interessant welche Information du überhaupt verwerten möchtest. Straße, Hausnummer, beides? ...

          Zitat von Nordlicht11180 Beitrag anzeigen
          Beispiele habe ich genug
          Wir aber eben nicht.

          Ich hab die Ursprungsfunktion aus dem ersten Beitrag getestet, 8.-Mai-Straße bringt gar keinen Match und die "Straße des 18. Oktober" bringt einen falschen Match. Bei französischen Adressen kenne ich halt Fälle die möglicherweise problematisch sind, daher wäre es halt hilfreich, wenn du hier schon Hilfe suchst, das du genau spezifizierst was du gerne haben willst, oder z.B. eine Reihe mit Grenzfällen bringst die korrekt gematcht werden müssen.

          Kommentar


          • #6
            Hallo
            Ich brauche beides , also Strasse und Hausnummer e.t.c, aber eben von der Strasse getrennt
            Ich glaube man kann dies nicht zu 100% trennen, aber mit der Funktion wurde die meinsten Strassen
            von den Hausnummer getrennt
            habe es eben nochmal an diesen Beispiel getestet
            PHP-Code:
            $Rechnungs_Strasse_Split splitStreet_mod("Holzknechtstr 64/623");
            $Rechnungs_Strasse       $Rechnungs_Strasse_Split['street_name'];
            $Rechnungs_Hausnummer    =trim($Rechnungs_Strasse_Split['street_number'].$Rechnungs_Strasse_Split['care_of'].$Rechnungs_Strasse_Split['schluss']);
            echo 
            "Strasse        :" .$Rechnungs_Strasse;
            echo 
            "<br>Hausnummer :" .$Rechnungs_Hausnummer
            Nur eben bei den Frankreich adresse steht die Hausnummer vorne und ich brauche Sie für Intrahip hinten
            Also
            Spallte : Strasse
            Spalte : hausnummer
            Die Frankreich adressen sehen an meistens so aus
            7, rue du Pont de Pierre
            65, Avenue Felix Faure
            5 Rue Federico Garcia Lorca
            33 RUE DE L\'ABONDANCE
            6, rue Fernand David

            gruß Martin

            Kommentar


            • #7
              Zur Erinnerung

              Zitat von Tropi Beitrag anzeigen
              Was soll die ursprüngliche Funktion alles matchen? Stock, Stiege, etc.? Wie siehts mit Zahlbereichen aus? Was ist mit Buchstaben an der Hausnummer bzw. Türnummer?
              Und dann das ganze nochmal für Frankreich. Wenn du da keine Beispiele/Tests/Spezifikationen hast wirst du da wohl kein Glück haben.
              Beantworte Ihm doch einfach mal die ganzen Fragen

              @edit: Es gibt scheinbar sehr viele Straßen die dir Probleme machen werden.
              2er Straße
              An 44
              Posten 90
              164er Ring
              etc.
              Die Jatravartiden auf Viltwodl VI können den Kram von dir auch nicht nachvollziehen

              Kommentar


              • #8
                Ich bezweifle, daß es eine 100%-Lösung gibt, aber so dürftest Du bereits vieles abdecken:
                PHP-Code:
                preg_match_all'/([^\d,]+)|([\d\/]+)/'$sAddressString$aMatched );
                var_dump$aMatched[0] ); 
                Competence-Center -> Enjoy the Informatrix
                PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                Kommentar


                • #9
                  Ich weiß zwar nicht in welchem Umfang du das machen möchtest, aber eine Möglichkeit wäre es noch, sich freie Straßen Tabellen für die Datenbank zu ziehen. Bekommst dann nur mit "falschen" Schreibweisen Probleme.

                  Aber Arne hat schon recht, eine 100% Lösung zu finden wird schwer und ist wahrscheinlich kaum möglich.
                  Die Jatravartiden auf Viltwodl VI können den Kram von dir auch nicht nachvollziehen

                  Kommentar


                  • #10
                    Zitat von Nordlicht11180
                    Jetzt brauche ich mal hilfe bei Adressen z.b Frankreich.
                    Zitat von Moewe Beitrag anzeigen
                    @edit: Es gibt scheinbar sehr viele Straßen die dir Probleme machen werden.
                    2er Straße
                    An 44
                    Posten 90
                    164er Ring
                    etc.
                    Die klingen nicht sehr französich.

                    Nordlicht11180: Den gesuchten Regex wendest du dann aber nur auf gefilterte (nach Land) Adressen aus Frankreich an? Ich glaub dann hast du mit dem Regex von Arne gute Chancen viel automatisiert zu erwischen. Ein Regex für alle Länder wäre m.E. nicht sinnvoll/zielführend.

                    LG
                    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                    PHP.de Wissenssammlung | Kein Support per PN

                    Kommentar


                    • #11
                      Zitat von hausl Beitrag anzeigen
                      Die klingen nicht sehr französich.
                      Das ist mir schon klar, ich wollte ihm nur zeigen dass es auch in Deutschland neben den bekannten Straßen wie Straße des 18 Oktis usw. noch zich andere gibt, welche mittendrin oder am Anfang ne zahl stehen haben.
                      Die Jatravartiden auf Viltwodl VI können den Kram von dir auch nicht nachvollziehen

                      Kommentar


                      • #12
                        Hab auch mal bisschen gespielt '/^((\d+[a-z]?)\-?(\d+[a-z]?)),?\s*(.+)$/' bringt bei mir wesentlich bessere Ergebnisse als Arnes Muster. Habs mal mit den Daten probiert:
                        PHP-Code:
                        $sAddressStrings = [
                            
                        "53 Rue du 11 Octobre",
                            
                        "111 Boulevard de Châteaudun",
                            
                        "25, Rue Jeanne d'Arc",
                            
                        '46-48 Rue Emile Zola',
                            
                        '18-28 D97'
                            
                        ]; 
                        Hinweise:
                        1. Hab die Adressen von Google Maps, sind alles echte Adressen aus Orleans.
                        2. Mein Muster prüft auf auch Buchstaben in der Hausnummer + Beistriche als Trenner. Bei Google Maps wird allerdings immer ohne Beistrich getrennt, und ich hab auch keine Buchstaben in der Hausnummer getroffen. Eventuell kann man das also rauswerfen.

                        Kommentar


                        • #13
                          Bezogen auf Deine Beispiel Adressen sind Deine Ergebnisse besser, das stimmt.
                          Wendest Du das aber auf die Beispieladressen von #6 an, kommt mit Deiner RegEx das:
                          Code:
                          Array
                          (
                              [0] => Array
                                  (
                                      [0] => Array
                                          (
                                          )
                          
                                      [1] => Array
                                          (
                                          )
                          
                                      [2] => Array
                                          (
                                          )
                          
                                      [3] => Array
                                          (
                                          )
                          
                                      [4] => Array
                                          (
                                          )
                          
                                  )
                          
                              [1] => Array
                                  (
                                      [0] => Array
                                          (
                                              [0] => 65, Avenue Felix Faure
                                          )
                          
                                      [1] => Array
                                          (
                                              [0] => 65
                                          )
                          
                                      [2] => Array
                                          (
                                              [0] => 6
                                          )
                          
                                      [3] => Array
                                          (
                                              [0] => 5
                                          )
                          
                                      [4] => Array
                                          (
                                              [0] => Avenue Felix Faure
                                          )
                          
                                  )
                          
                              [2] => Array
                                  (
                                      [0] => Array
                                          (
                                          )
                          
                                      [1] => Array
                                          (
                                          )
                          
                                      [2] => Array
                                          (
                                          )
                          
                                      [3] => Array
                                          (
                                          )
                          
                                      [4] => Array
                                          (
                                          )
                          
                                  )
                          
                              [3] => Array
                                  (
                                      [0] => Array
                                          (
                                              [0] => 33 RUE DE L'ABONDANCE
                                          )
                          
                                      [1] => Array
                                          (
                                              [0] => 33
                                          )
                          
                                      [2] => Array
                                          (
                                              [0] => 3
                                          )
                          
                                      [3] => Array
                                          (
                                              [0] => 3
                                          )
                          
                                      [4] => Array
                                          (
                                              [0] => RUE DE L'ABONDANCE
                                          )
                          
                                  )
                          
                              [4] => Array
                                  (
                                      [0] => Array
                                          (
                                          )
                          
                                      [1] => Array
                                          (
                                          )
                          
                                      [2] => Array
                                          (
                                          )
                          
                                      [3] => Array
                                          (
                                          )
                          
                                      [4] => Array
                                          (
                                          )
                          
                                  )
                          
                          )
                          Competence-Center -> Enjoy the Informatrix
                          PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                          Kommentar


                          • #14
                            Juhu, best Regex Battle
                            PHP-Code:
                            preg_match("/^([\d][a-z-\/\d]*)|[\s]+([\d][a-z-\/][\d]*)/i"$input_line$output_array); 
                            Fynder - http://www.fynder.de - Tutorials zum Thema Technik

                            Kommentar


                            • #15
                              Zitat von Andreas
                              Juhu, best Regex Battle
                              Du nimmst aber nicht teil, weil ich noch keine Anmeldegebühr von Dir auf'm PayPal-Konto habe...

                              Ausserdem, angewendet auf die Adressen aus #6:
                              Code:
                              Array
                              (
                                  [0] => Array
                                      (
                                          [0] => Array
                                              (
                                                  [0] => 7
                                              )
                              
                                          [1] => Array
                                              (
                                                  [0] => 7
                                              )
                              
                                          [2] => Array
                                              (
                                                  [0] => 
                                              )
                              
                                      )
                              
                                  [1] => Array
                                      (
                                          [0] => Array
                                              (
                                                  [0] => 65
                                              )
                              
                                          [1] => Array
                                              (
                                                  [0] => 65
                                              )
                              
                                          [2] => Array
                                              (
                                                  [0] => 
                                              )
                              
                                      )
                              
                                  [2] => Array
                                      (
                                          [0] => Array
                                              (
                                                  [0] => 5
                                              )
                              
                                          [1] => Array
                                              (
                                                  [0] => 5
                                              )
                              
                                          [2] => Array
                                              (
                                                  [0] => 
                                              )
                              
                                      )
                              
                                  [3] => Array
                                      (
                                          [0] => Array
                                              (
                                                  [0] => 33
                                              )
                              
                                          [1] => Array
                                              (
                                                  [0] => 33
                                              )
                              
                                          [2] => Array
                                              (
                                                  [0] => 
                                              )
                              
                                      )
                              
                                  [4] => Array
                                      (
                                          [0] => Array
                                              (
                                                  [0] => 6
                                              )
                              
                                          [1] => Array
                                              (
                                                  [0] => 6
                                              )
                              
                                          [2] => Array
                                              (
                                                  [0] => 
                                              )
                              
                                      )
                              
                              )
                              Ich sehe da nur Hausnummern, aber bspw. keine Strassen !
                              Competence-Center -> Enjoy the Informatrix
                              PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                              Kommentar

                              Lädt...
                              X