Frank Schönmann: Suchmaschineneingaben splitten

Beitrag lesen

hi!

Hat einer eine Idee, wie ich die Zeile splitte?
Ich kenne mich mit den regulären Ausdrücken noch nicht so aus und
meine Versuche das Plus oder Minus zu erkennen scheiterten immer.
Nach Leerzeichen konnte ich nicht splitten, da die ja evtl.
wichtig sein könnten...

Der Parser der SELFHTML-Archivsuche, hier auf diesem Server, kann das
wohl:

=== cut ===
sub parser ()
{
   # -------------------------------------------------------
   # lokale Kopie des Suchausdrucks
     my $rest = $suchausdruck;
   # -------------------------------------------------------
   # Ersetze " durch " und zähle sie dabei ... (gulp, das "perlt"...)
     my $anzahl_gf = ($rest =~ tr/"/"/);
   # Sicherstellen, daß eine gerade Anzahl von ' darin enthalten ist:
     if (($anzahl_gf % 2) == 1) { $rest .= '"'; }
   # ... notfalls eben hinten eines dranhängen!
   # -------------------------------------------------------
   # Leerzeichen innerhalb von Anführungszeichen nach '%20' konvertieren
     while ($rest =~ /"[\S][^"]+\s[^"]+[\S]"/)
           { $rest =~ s/"([\S][^"]+)\s([^"]+[\S])"/"$1%20$2"/; }
   # (fixed version, Frank Schönmann 14.9.1999)
   # -------------------------------------------------------
   # Dann alle '"' rauswerfen
     $rest =~ s/"//g;
   # -------------------------------------------------------
   # Es bleiben durch Leerzeichen getrennte Token übrig
     @Token = split (/ /, $rest);
   # -------------------------------------------------------
   # Tokens auf @Must, @Can und @Not verteilen
     for (@Token)
     {
          # fehlt hier noch... ;)
     }
}
=== cut ===

In @Token stehen am Ende die einzelnen Suchtokens. Es gibt welche
mit + oder - am Anfang bzw. mit keinem solchen Zeichen. Danach wird
entschieden, in welches Array das letztendlich gehört.

Die obige Routine unterstützt übrigens auch die Zusammenfassung durch
Leerzeichen getrennter Ausdrücke mit Anführungszeichen.

bye, Frank!