Named subpatterns in PHP

Da ich in regulären Ausdrücken gerade häufiger sog. "benannte Teilmuster" (named subpatterns) nutze und es mir so vorkommt als würde diese ungemein hilfreiche "Funktion" eher selten benutzt, will ich hier kurz darauf hinweisen. Named subpatterns gibt es seit PHP 5.2.2 und sie funktionieren wie folgt:

Angenommen ich möchte Daten aus verschiedenen Quellen verwenden, dann kann bzw. wird es vorkommen, dass diese Daten unterschiedliche Formate haben. Ein ganz simples Beispiel:

Quelle A: 44793 Bochum - Sonnig - 19 Grad Quelle B: 44793 Bochum - 19 Grad - Sonnig

Die gleichen Daten, aber ein andere Reihenfolge. Wenn ich nun für jede Datenquelle einen reguläre Ausdruck verwende um die Daten zu teilen, hatte man früher oft folgendes Problem:

$string = "44793 Bochum - Sonnig - 19 Grad";
preg_match('/(.+)\s-\s(.+)\s-\s(.+)/', $string, $temp);

Bei diesem Code finde ich die Temperatur einmal in $temp[3] und einmal in $temp[2]. Somit müsste ich für jede Datenquelle zusätzlich speichern in welchem Feld welcher Wert liegt. Und genau hier kommen die benannten Suchmuster ins Spiel. Durch eine kleine Modifikation des regulären Ausdrucks kann man den Teilmustern Namen geben:

$string = "44793 Bochum - Sonnig - 19 Grad";
preg_match('/(?<ort>.+)\s-\s(?<descr>.+)\s-\s(?<temperatur>.+)/', $string, $temp);

ergibt dann:

Array
(
    [0] => 44793 Bochum - Sonnig - 19 Grad
    [ort] => 44793 Bochum
    [1] => 44793 Bochum
    [descr] => Sonnig
    [2] => Sonnig
    [temperatur] => 19 Grad
    [3] => 19 Grad
)

Keine Magie, aber ungemein hilfreich wenn man es noch nicht kennt ;)