Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

preg_match Temperatur auslesen (Problem Minusgrade)

1 view
Skip to first unread message

christian

unread,
Jan 27, 2010, 2:33:24 PM1/27/10
to
hallo liste,

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)

Peter Schleif

unread,
Jan 27, 2010, 2:46:05 PM1/27/10
to
christian schrieb am 27.01.2010 20:33 Uhr:
>
> $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):

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

Peter Schleif

unread,
Jan 27, 2010, 3:04:16 PM1/27/10
to
Peter Schleif schrieb am 27.01.2010 20:46 Uhr:
>
> (Salzburg).+[^-](\-?[0-9]{1,2}\.[0-9]°)

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

Ulf [Kado] Kadner

unread,
Jan 27, 2010, 4:31:40 PM1/27/10
to
Hallo christian, Du schriebst:

> 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

Andreas Hecht

unread,
Jan 29, 2010, 5:49:50 PM1/29/10
to
Am 27.01.2010 20:33, schrieb christian:

> 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

0 new messages