Mehr Praxisnähe

(Auszug aus "Reguläre Ausdrücke" von Jeffrey E. F. Friedl)

Es wäre ganz nützlich, auch negative und gebrochene Temperaturen zuzulassen. Die eigentliche Berechnung ist unproblematisch –- Perl macht bei Zahlen meist keinen Unterschied zwischen natürlichen, ganzen und Fließkommazahlen. Der reguläre Ausdruck allerdings muss angepasst werden. Wir können vorne ein ­˹-?˼ einfügen, um das Minus-Vorzeichen zu erlauben. Wir können ebenso ˹[-+]?˼ schreiben -– ein Pluszeichen stört nicht.

Für die Nachkommastellen geben wir ˹(\.[0­-9]*)?˼ an. Der Punkt mit dem Escape passt auf einen literalen Punkt, den Punkt der Fließkommadarstellung. ˹\.[0­-9]*˼ passt also auf einen Punkt, gefolgt von einer beliebigen Anzahl von Ziffern. Weil ˹\.[0­-9]*˼ durch ˹(...)?˼ eingeklammert ist, ist es optional (das ist etwas anderes als ˹\.?[0­-9]*˼, das auch dann passen würde, wenn kein Punkt vorhanden ist).

Alles zusammengesetzt ergibt:

if ($celsius =~ m/^[­+]?[0­9]+(\.[0­9]*)?$/) {

Das lässt Eingaben wie 32, ­-3.723 und +98.6 zu. Nicht ganz perfekt, denn Zahlen ohne Ziffern vor dem Dezimalpunkt (wie .357) sind nicht erlaubt, 0.357 dagegen schon, darum lassen wir es dabei bewenden. Das Problem, Fließkommazahlen zu erkennen, hat aber ein paar ganz verzwickte Nebenaspekte, die ich unter Regex-Methoden aus der Praxis genauer erläutere.

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema Reguläre Ausdrücke bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:
   

Copyright der deutschen Ausgabe © 2008 by O’Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "Reguläre Ausdrücke" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O’Reilly Verlag GmbH & Co. KG, Balthasarstr. 81, 50670 Köln