Hi,
momentaner Stand der Dinge: Klappt nicht :-(
Beste Ergebnisse erziele ich mit folgendem Code:
$query =~ s/"(\S*?) (.*?)"/#$1&&$2#/g;
@woerter = split(/ /,$query);
foreach $foo (@woerter) {
$foo =~ s/&&/ /g;
$queries{$foo}++;
}
Ich habe noch (der Anschaulichkeit halber) Doublequotes in "#" ersetzt. Zeichen für "Space im String" ist nicht "###", sondern "&&", weil das garantiert nicht vorkommen kann (andere Teile der Programmierung).
Hierbei werden Queries der Art '"zwei Wörter"' korrekt ausgewertet. Leider wird folgendes falsch übersetzt: ("/" für Trennung bei split)
"drei ganze Wörter" -> #drei ganze / Wörter#
"zwei Wörter" mit Anhang -> "zwei Wörter" / mit / Anhang (also "..." statt #...#)
"zwei Wörter" "noch zwei" -> #zwei Wörter" #noch zwei" (keine Trennung!)
"Wort" -> "Wort" (wieder "..." statt #...#)
Jetzt kam mir folgender Gedanke: Kann man irgendwie erst den gefundenen Teilstring bearbeiten, also in etwa:
$query =~ /"(.*?)"/ [$1 =~ s/ /&&/g] /g;
In eckigen Klammern ist also erst die Ersetzung... davor wird nur gesucht! Geht das irgendwie? So wären meine Probleme nämlich im nu gelöst... :-)
Cheatah