reg exp findet zx9r in zx9rirgendwas nicht?
Denis
- perl
0 Denis
Hallo Welt!
Folgendes Problemche hab' ich:
zx9rirgendwas =~ /$zx9r/gi;
Der reguläre Ausdruck gibt mir keinen Treffer zurück. Liegt wohl an der 9. Was könnte man mal zwecks Heilung tun?
Hinweis noch: zx9r ist jetzt ein zufälliges Suchmuster, kann also auch ganz anders aussehen, zB. r74xyz...
Anybody any ideas?
Thx,
Denis
zx9rirgendwas =~ /$zx9r/gi;
MIST, verwünschter, Sorry, das bringt natürlich schon ein TRUE...
Anders gefragt, folgender Quelletext gibt als letztes unter dem Wörtchen "Neue" diese Liste aus:
Biker Motorradfahren Links Gõstebuch ZX9R zx9rirgendwas
ZX9R soll - wenn man caseinsensitive denkt - aber nicht mehr in der Liste sein, weil da ja auch zx9rirgendwas steht und's somit schon "teil" der Liste ist. Hoffe, es ist klar, was ich will. Jedes Stichwort was schon in der Beschreibung ist fleigt aus der Stichwortliste - klappt auch schon.
Dann muß noch jedes Stichwort, was (caseINsensitive) mehrmals in den Stichworten ist auch noch raus.... klappt, bis auf bei ZX9R... :-(
Naja, hier das Script dazu:
$in{'Description'} = "Alles für Motorradfahrer und die Freunde des Bikens. Hier findet Ihr ein Forum, erlebt Forumsdiskussionen und mehr! Alles zur ZX9-R";
$in{'Stichworte'} = "für Motorrad motorrad Biker Biken Forums Motorradfahren Forum zx9r Links LINKS Gästebuch Links ZX9R ZX9R zx9rirgendwas zx9-r ZX9-R";
print "Beschreibung:\n$in{'Description'}\n\n";
print "\nAlte:\n";
print "$in{'Stichworte'}\n";
## "Keine Stichworte, die schon in der Beschreibung sind"-Modifikation by Denis Campbell
## Wir ersetzten zunaechst die nervigen User-Stichwort-Delimeter durch Leerschritte:
$in{'Stichworte'} =~ s/[,:\_/\]/ /g;
$in{'Stichworte'} =~ s/\s{2,}/ /g; ## Danach fliegen eventuelle mehrfache Leerschritte raus.
## Die Stichworte als einzelne Elemente einer Liste zuweisen
@stichworte = split(/\s+/,$in{'Stichworte'});
## Jetzt alle Stichworte, die schon in der Beschreibung sind rausschmeissen
$cnt = 0;
while ($cnt <= $#stichworte ) {
if ( $in{'Description'} =~ /$stichworte[$cnt]/i ) {
print "$stichworte[$cnt] ist in der Beschreibung und fliegt raus...\n";
splice(@stichworte,$cnt,1);
} else {
print "$stichworte[$cnt] darf bleiben...\n";
$cnt++;
}
}
print "\n\n\n";
print "@stichworte";
print "\n\n";
## Gucken, was jetzt noch in den Stichworten doppelt ist:
$cnt = 0;
my $tmpstichworte = "@stichworte";
print $tmpstichworte . "\n";
my @einfacheTreffer;
foreach $stichwort (@stichworte) {
$anzahl = 0;
while ($tmpstichworte =~ /$stichwort/gi) {
$anzahl++;
}
print "$& ->";
if ($anzahl > 1) {
print "Mehr als ein Treffer fuer $stichwort!\n";
splice(@stichworte,$cnt,1);
}
$cnt++;
}
## Die Liste der Stichworte wieder zu einem String konvertieren
$in{'Stichworte'} = "@stichworte";
print "\n";
print "\nNeue:\n";
print $in{'Stichworte'};
print "\n";
Danke für Tips,
Gruß
Denis
Hallo Denis,
mir scheint, der Fehler liegt nicht in dem regulären Ausdruck, sondern
in der foreach-Schleife:
Gucken, was jetzt noch in den Stichworten doppelt ist:
$cnt = 0;
my $tmpstichworte = "@stichworte";
print $tmpstichworte . "\n";
my @einfacheTreffer;
foreach $stichwort (@stichworte) {
$anzahl = 0;
while ($tmpstichworte =~ /$stichwort/gi) {
$anzahl++;
}
print "$& ->";
if ($anzahl > 1) {
print "Mehr als ein Treffer fuer $stichwort!\n";
splice(@stichworte,$cnt,1);
}
$cnt++;
}
$cnt wird immer um 1 erhöht, Du nimmst aber in splice Elemente aus dem
Array heraus.
Viele Grüße
Christoph
mir scheint, der Fehler liegt nicht in dem regulären Ausdruck, sondern
in der foreach-Schleife:
Ups? Danke erstmal, da werd' ich mal suchen gehen.... :)
Gruß
Denis