Frank Schönmann: regulärer Ausdruck "invertiert"

Beitrag lesen

hi!

$daten =~ s/.*\D(-?\d*°C)\D.*/$1/g;
Falsche Falle: "-" ist ein Nicht-Zahlen-Zeichen, paßt also auch
auf "\D". Und da du explizit auch null Minuszeichen erlaubst,
vorher aber explizit mindestens ein Nicht-Zahl-Zeichen forderst,
wird halt das Minuszeichen beim \D gefunden, und für "-?" bleibt
dann nur noch "" übrig.

Nein, das ist so nicht richtig. Das Problem liegt vielmehr an dem
gierigen *-Quantifier am Anfang des regulären Ausdrucks, also noch
vor dem \D. Macht man diesen Quantifier nämlich nicht-gierig, indem
man ein ? dahinter setzt, funktioniert es.

Das hängt damit zusammen, dass eben der ".*"-Teilausdruck gierig ist,
der "-?"-Teilausdruck aber nicht. Daher schnappt sich der erste Teil-
ausdruck soviel wie er kann, ohne dass es dem zweiten was ausmacht.

Aber so ganz 100%-ig korrekt ist der obige Ausdruck auch nicht. Der
kann durchaus manchmal fehlerhaft arbeiten. Besser sowas in der Art
verwenden: s/.*?(-?\d+°C).*/$1/g;

bye, Frank!