SuchString zerlegen

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

  • SuchString zerlegen

    Hi,

    ich versuche gerade einen Suchstring zu zerlegen.

    Klappt auch schon ganz gut....

    Beispiel: http://www.triebschicht.de/spielwies...+rum%22+%2Bdvd

    Die Funktion die ich dafür benutze ist folgende.

    PHP-Code:
    function cut_search($search_string){
        
    $i 0;
        
    $z 0;
        
    $arr_search = array();
        
    $string false;
        while(
    $char $search_string{$i}){  
        
    //solange Zeichen in $search_string sind
            
            
    if($char == '"'){ //haben wir ein "
                
    ($string) ? $string false $string true
                
    //setz den schalter das wir ein " haben
                
    $i++; //ein zeichen weiter
                
    continue; //nächste runde
            
    }

            if(
    $char == " " AND !$string){  
            
    //haben wir ein leerzeichen und sind in keinem von " eingeschlossen Teil?
                
    $z++; //neues Wort 
            
    }else{
                
    $arr_search[$z] .= $char//zeichen anhängen
            
    }
            
            
    $i++;
        }
        
        if(
    count($arr_search)){
            return 
    $arr_search;
        }else{
            return 
    false;
        }

    Mich interessiert nun, ob das ganze nicht besser möglich ist, weil sowie ich nach etwa 'huhu +hallo +"hallo welt"' suchen möchte setzt es aus....
    Ausserdem kann man es vielleicht noch performanter machen als jedes Zeichen einzeln anzugucken...

    Any Ideas for my Brain? - Give em to me! *g*
    Zuletzt geändert von prego; 02.08.2005, 15:15.

  • #2
    Jetz mit RegExp

    So, habe mir jetzt eine RegExp zusammengeschraubt.... das ist allerdings absolutes neuland für mich


    PHP-Code:
    $regexp "/([(+|\-)a-z0-9])+|\"([(a-z0-9) ])+\"/i"
    Also, der string kann entweder aus a-z und 0-9 mit + oder - davor bestehen oder aus ", a-z, 0-9, " bestehen.

    aus
    'huhu hallo -blub "hier la rum" +dvd lal'
    wird dann

    PHP-Code:
                [0] => huhu
                
    [1] => hallo
                
    [2] => -blub
                
    [3] => "hier la rum"
                
    [4] => +dvd
                
    [5] => lal 
    Soweit so gut, wie mach ich es aber jetzt, das die " nicht mit angezeigt werden.

    Ein anderes Gimmik wäre noch das +/- auch vor den " Ausdruck sein kann.... da muss ich nochmal probieren...

    Kommentar


    • #3
      du musst dein array eh nochmal durchlaufen um die query zusammenzubauen. ein guter zeitpunkt, überflüssige zeichen zu entfernen.
      Kissolino.com

      Kommentar


      • #4
        so, das hier scheints zu sein

        PHP-Code:
        $regexp "/[+\-]?[-\\w]+|[+\-]?[\"']+[-\\w\\s]+[\"']/"
        Es werden jetzt auch noch ' mitgenommen ausserdem habe ich \w für Wortzeichen benutzt.... damit deutsche Umlaute un der andere Schmuu *g* auch noch mit dabei sind. Der - kann auch noch in Worten enthalten sein.


        Irgendwelche Verbessungsvorschläge?

        Kommentar


        • #5
          Hallo ...

          Sag mal,
          was Du hier beschrieben hast ist genau das was ich suche.
          Könntest Du evtl. das komplette Script hier posten ???

          Vielen Dank im Voraus


          Fraeyodm

          Kommentar


          • #6
            Schiddeböhn

            PHP-Code:
            public function get_searchstring($searchstring){
                
            $regexp "/[+-]?[-!.,\wöäüß]+|[+-]?[\"']+[-!.,\wöäüß\s]+[\"']/i";
                
            $arr_search = array();

                if(
            preg_match_all($regexpstripslashes($searchstring), $arr_search)){

                    
            $arr_words = array();

                    
            $done_plus false;
                    while(
            $word pos($arr_search[0])){

                        
            $word str_replace("'"""$word);

                        
            //Alle Wörter mit weniger als einem buchstaben raus
                        
            if(strlen($word) < 2){
                            
            next($arr_search[0]);
                            continue;
                        }
                        if(
            strpos(substr($word1), '-')){
                            if(
            $word{0} == "+" OR $word{0} == "-"){
                                
            $word $word{0}.'"'.substr($word1).'"';
                            }else{
                                
            $word '"'.$word.'"';
                            }
                        }

                        if(
            $word{0} == "+" OR $word{0} == "-"){
                            
            $arr_words[] = $word."*";
                            if(
            key($arr_search[0]) == 0){
                                
            $done_plus true;
                            }
                        }else{
                            if(
            key($arr_search[0]) == 0){
                                
            $arr_words[] = "+".$word."*";
                            }else{
                                if(
            $done_plus){
                                    
            $arr_words[] = $word."*";
                                }else{
                                    
            $arr_words[] = "+".$word."*";
                                }
                            }
                        }

                        
            next($arr_search[0]);
                    }
                }

                
            #print_r($arr_words);

                
            return implode(" "$arr_words);

            Diese Funktion bereitet einen Suchstring für die MySQL-Boolean-Fulltext-Search vor.

            http://dev.mysql.com/doc/refman/5.0/...t-boolean.html

            Kommentar

            Lädt...
            X