tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
10
ZUGRIFFE
8348
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    mnbvcxy mnbvcxy ist offline Mitglied Bronze
    Registriert seit
    Feb 2004
    Beiträge
    48
    Wie gesagt, ich möchte gerne aus einem beliebigen String jeweils alle zusammenhängenden Buchstaben und Zahlen bekommen. Es würde auch reichen das jeweils bei einem "Übergang" von Zahl zu Buchstabe und umgekehrt ein Leerzeichen eingefügt wird.

    Ich denke das das ganze über reguläre Ausdrücke gehen wird, aber weiter als so bin ich nicht gekommen:

    PHP-Code:
    $string "abc20mnb16vcx";
    preg_match("/([0-9]+)([a-z]+)/i"$string$result); 
    Ausgegeben wird dann:
    $result[0] = 20mnb
    $result[1] = 20
    $result[2] = mnb

    Mal abgesehen das der erste Teil abgeschnitten wird, wie schaffe ich es, das dieser Vergleich mehrfach angewendet wird?
    Sprich so in der Art
    ([ (obigerAusdruck) ]*)
     

  2. #2
    Registriert seit
    Sep 2003
    Ort
    Fürth(Franken)
    Beiträge
    1.060
    Blog-Einträge
    3
    Versuchs mal mit dem hier: ([0-9a-zA-Z]) (ungetestet) in Verbindung mit der Funktion preg_match_all().

    greetz
    daddz
     
    be inspired...simplify...

  3. #3
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Ich hoffe, ich habe dich richtig verstanden:
    PHP-Code:
    <?php

        $string 
    'abc20mnb16vcx';
        
    $string preg_replace('/[a-z]+|[0-9]+/''\0 '$string);

    ?>
     
    Markus Wulftange

  4. #4
    mnbvcxy mnbvcxy ist offline Mitglied Bronze
    Registriert seit
    Feb 2004
    Beiträge
    48
    Ja! Das ist perfekt!

    Vielen Dank!
     

  5. #5
    mnbvcxy mnbvcxy ist offline Mitglied Bronze
    Registriert seit
    Feb 2004
    Beiträge
    48
    Ich habe den Thread wider geöffnet, leider hat sich nämlich ein blöder Effekt eingestellt.
    Das auseinandernehmen des Strings klappt super, nur für die weitere Verwendung gibt es einen komischen Effekt.

    Wenn man dieses ersetzen mehrmals anwendet, wird aus einem Leerzeichen zwei, aus zwei drei usw. usf.
    Dummerweise ist ein String-Vergleich dann nicht mehr möglich, da
    Code :
    1
    
    "abc 20" != "abc  20"
    ist.

    Gibt es ne Möglichkeit nur dann Leerzeichen einzufügen, wenn vorher keins da war
     

  6. #6
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Wieso wendest du die Funktion mehrmals an? Ändere den regulären Ausdruck mal wie folgt:
    Code :
    1
    
    /(?:[a-z]+|[0-9]+)[^\s]/
     
    Markus Wulftange

  7. #7
    mnbvcxy mnbvcxy ist offline Mitglied Bronze
    Registriert seit
    Feb 2004
    Beiträge
    48
    Der Hintergrund ist folgender:

    Man sucht nach einem Begriff, und sollte kein Treffer erfolgen wird ein Vorschlag unterbreitet. Dieser Vorschlag ist halt Leerzeichen dort wo buchstaben und zahlen "aufeinandertreffen".

    Das funktioniert auch alles sehr gut, nur wenn man einen Begriff eingibt, der keine Treffer erzielt und auf den Vorschlag klickt und auch dieser keinen Treffer erzielt, geht das endlos so weiter, mit dem Unterschied, das der Suchstring langsam anwächst und immer mehr Leerzeichen enthält.
    Ein Vergleich des Suchbegriffs und dem Vorschlag scheitern an den unterschiedlichen Leerzeichen...

    Geht leider mit deinem 2. Vorschlag auch nicht

    [edit]
    Das verdeutlicht das Problem:

    //Simuliert einen Suchbegriff
    <a href="test.php?suchwort=abc20def">start</a>

    <?php
    $alt_search = preg_replace('/[a-z]+|[0-9]+/', '\0 ', $suchwort);

    $alt_search = trim($alt_search);
    $suchwort = trim($suchwort);

    echo "<pre>$suchwort</pre>";
    echo "<pre>$alt_search</pre>";

    echo "Meinten Sie: <a href=\"test.php?suchwort=$alt_search\">$alt_search</a>";
    ?>
    Wenn man weiter auf den Vorschlag klickt, werden immer mehr Leerzeichen eingefügt...
    Geändert von mnbvcxy (28.03.06 um 19:28 Uhr)
     

  8. #8
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Nächster Versuch: entferne einfach doppelte Leerzeichen:
    PHP-Code:
    $string 'abc20mnb16vcx';
    $string str_replace('  '' 'preg_replace('/[a-z]+|[0-9]+/''\0 '$string)); 
     
    Markus Wulftange

  9. #9
    mnbvcxy mnbvcxy ist offline Mitglied Bronze
    Registriert seit
    Feb 2004
    Beiträge
    48
    Uhhh...das sieht guut aus!!

    DANKE!

    Hab schon langsam verzweifelt.
    Das mit dem doppelten Leerzeichen war auch mein Gedanke, ich hab 5 oder 6 verschiedene Varianten gesehen. Da das nicht klappte, mit deinem Beispiel aber doch, hab ichs damit nochmal probiert.
    Total irre. Obwohl mit <pre> ausgegen ergibt ein md5 hash nicht dasselbe (leerzeichen vorne und hinten auch überprüft.
    Scheinbar gibt es verschiedene Arten von Leerzeichen...
     

  10. #10
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Der MD5-Algorithmus berücksichtigt jedes Zeichen und nicht nur lesbare Zeichen. Sogar von einer leeren Zeichenkette gibt es einen MD5-Hashwert.
     
    Markus Wulftange

  11. #11
    mnbvcxy mnbvcxy ist offline Mitglied Bronze
    Registriert seit
    Feb 2004
    Beiträge
    48
    Stimmt.

    Mittlerweile läuft das ganze so wie ich mir das vorgestellt habe!

    VIELEN DANK!
     

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 31.08.10, 21:14
  2. Antworten: 4
    Letzter Beitrag: 16.03.10, 12:12
  3. Antworten: 2
    Letzter Beitrag: 14.04.07, 14:15
  4. Antworten: 7
    Letzter Beitrag: 15.02.06, 11:52
  5. In einem String einen Buchstaben ersetzen!
    Von mgd-one im Forum .NET Archiv
    Antworten: 3
    Letzter Beitrag: 31.10.03, 13:53