ich versuche mit php von folgender Seite die Temperatur auszulesen:
$wetter_seite = file_get_contents('http://www.zamg.ac.at/wetter/
prognose/?ts=1207037641');
mein regulärer ausdruck sieht so aus:
preg_match('/(Salzburg).+([0-9]{1,2}\.[0-9]°)/', $wetter_seite,
$treffer)
die Ausgabe (echo $treffer[2]) funktioniert auch, ausser ich will
Minusgrade zusätzlich angezeigt bekommen.
Ich weiss nicht, wie ich meinen regex verändern muss, damit die
Minusgrade (so fern vorhanden) mitangezeigt werden.
Ein Minuszeichen mit ? funktioniert nicht (egal ob maskiert oder
nicht):
preg_match('/(Salzburg).+(\-?[0-9]{1,2}\.[0-9]°)/', $wetter_seite,
$treffer)
oder so
preg_match('/(Salzburg).+(-?[0-9]{1,2}\.[0-9]°)/', $wetter_seite,
$treffer)
Das gierige .+ frisst das Minuszeichen weg. Setze noch ein [^-] vor die
zweite Klammer und das optionale Minus in die Klammer:
(Salzburg).+[^-](\-?[0-9]{1,2}\.[0-9]°)
Peter
Ich sehe gerade noch, dass dein Ausdruck auch bei Plus-Graden nur mit
einstelligen Temperaturen funktioniert. Das .+ frisst nicht nur das
Minus sondern auch die Zehnerstelle der Temperatur. Also darf das letzte
Zeichen vor der zweiten Klammer auch keine Zahl sein:
(Salzburg).+[^\-\d](\-?\d{1,2}\.\d°)
Peter
> ich versuche mit php von folgender Seite die Temperatur auszulesen:
>
> $wetter_seite = file_get_contents('http://www.zamg.ac.at/wetter/
> prognose/?ts=1207037641');
> mein regulärer ausdruck sieht so aus:
> preg_match('/(Salzburg).+([0-9]{1,2}\.[0-9]°)/', $wetter_seite,
> $treffer)
/(Salzburg).+?(-?[0-9]{1,2}\.[0-9]°)/
Mfg, Ulf
> mein regulärer ausdruck sieht so aus:
> preg_match('/(Salzburg).+([0-9]{1,2}\.[0-9]°)/', $wetter_seite,
> $treffer)
Vorschlag: /(Salzburg).*?([0-9.-]{3,}°)/
Das klappt solange, wie zamg.ac.at sein Layout nicht ändert. Falls du
nicht gerade auf die Zehntelgrade wert legst und mit größeren
Aktualisierungsabständen (einige Stunden) leben kannst, würde ich
an deiner Stelle als Quelle die Wetterdaten des Flughafens im
XML-Format bevorzugen:
> http://ws.geonames.org/findNearByWeatherXML?lat=47.8&lng=13
Mfg,
Andreas