hi!
Ich habe mir dein Skript nicht näher angeschaut, sondern mal einen etwas anderen Ansatz versucht. Folgendes ist dabei rausgekommen:
=== cut ===
#!/usr/bin/perl
my (@must, @can, @not);
$text = 'hallo +"dies ist ein test" -selfhtml';
Alle Leerzeichen zwischen " und " umwandeln in %20, anschließend alle " entfernen
while ($text =~ /"(.+?) (.+?)"/)
{
$text =~ s/"(.+?) (.+?)"/"$1%20$2"/;
}
$text =~ s/"//g;
Tokens in $text sind jetzt durch Leerzeichen getrennt
@text = split / /, $text;
&parser(@text);
Jedes Token wird überprüft und einem Array zugeordnet
sub parser
{
for (@_)
{
if (s/^+//)
{
push @must, $_;
} elsif (s/^-//) {
push @not, $_;
} else {
push @can, $_;
}
}
}
=== cut ===
Sollte eigentlich klar sein: @must enthält Begriffe, die enthalten sein müssen, @can-Begriffe können vorkommen (erhöhen zb. die Bewertung), @not-Begriffe dürfen nicht vorkommen.
Nach "-Zeichen selbst kann man damit nicht mehr suchen, aber braucht man das wirklich? Die %20-Zeichen sollten später natürlich wieder in Leerzeichen umgewandelt werden.
bye, Frank!