Reguläre Ausdrücke machen nicht das, was sie sollten
vN-Nv
- perl
Hey Leute,
also es geht um folgendes: Hab hier einiges an Perl Skripten und html-Templates rumfliegen. Dabei ist es auch möglich in den Html-Templates If-Abfrage einzubauen und so dem Design ein wenig Dynamik einzuhauchen. Selbiges will ich auch tun und dafür wollte ich halt gewissen strings über Reguläre Ausdrücke abfangen (per IF in den Templates) und dann wenns matcht halt gewissen Content einbinden.
Und genau bei dem matchen gibt es arge Probleme. Diese Probleme tauchen genau dann auf, wenn die zu prüfende Variable mehr als nur simple Zeichen [a-zA-Z0-9] enthält. Sobald sich dort z.b. eine Leertaste oder ein Teufelswergzeug der deutschen Sprache wie ß oder ö,ü,ä befindet, passiert gar nichts mehr! Also nicht nur, dass ich den Ausdruck nicht gematcht kriege, nein die Auswertung klappt aus irgendeinem Grund überhaupt nicht mehr!
Mal ein Beispiel:
Variable: Volleyball -> überhaupt kein problem
aber z.b.
Variable: Fußball -> keine Chance mehr.. weder mit /Fu.*ball/i noch mit /(ball)$/i (was übrigens bei Volleyball sofort matcht - sollte es ja auch) und sogar /^(Fu)/ klappt nicht.. deshalb ja die Vermutung, dass da garnichts mehr funktioniert..
Bei Leertasten ist es das gleiche:
Variable: Ein Test -> kriege nicht mal den anfang abgefangen mit /^(Ein)/ ..
Alles klappt sobald nichts blödes in der Variable steht.. wahrscheinlich stehen da irgendwelche html-codes... aber müssten die nicht durch .* abgedeckt werden? Und wenn nicht.. wieso kann ich dann noch nicht mal das davor auswerten (Bei Fußball das "Fu") - das ergibt für mich wenig Sinn.
Danke im voraus für eure Hilfe ;)
你好 vN-Nv,
man kann nicht viel sagen, außer: lass dir ausgeben, was in der Variable genau drin steht (z. b. via print '---',$var,'---',"\n";) und prüfe, ob es auf deinen Ausdruck passt. Bei Fragen stelle beide Informationen hier hinein.
再见,
克里斯蒂安
Mal ein Beispiel:
Variable: Volleyball -> überhaupt kein problem
aber z.b.
Variable: Fußball -> keine Chance mehr.. weder mit /Fu.*ball/i noch mit /(ball)$/i (was übrigens bei Volleyball sofort matcht - sollte es ja auch) und sogar /^(Fu)/ klappt nicht.. deshalb ja die Vermutung, dass da garnichts mehr funktioniert..
Funktioniert bei mir einwandfrei:
my $string = 'Fußball spielen';
print ($string =~ /fu.ball/i ? 'OK.' : 'nicht OK.');
Alles klappt sobald nichts blödes in der Variable steht.. wahrscheinlich stehen da irgendwelche html-codes... aber müssten die nicht durch .* abgedeckt werden? Und wenn nicht.. wieso kann ich dann noch nicht mal das davor auswerten (Bei Fußball das "Fu") - das ergibt für mich wenig Sinn.
Sinnvoll wäre es, wenn du uns Code zeigen würdest.
Struppi.