Cheatah: Regulärer Ausdruck gesucht

Beitrag lesen

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