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('/(?.+)\s-\s(?.+)\s-\s(?.+)/', $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 😉

One thought on “Named subpatterns in PHP

  1. ColdDestiny

    Möchte man ein String untersuchen in dem das Vorkommen öfter vorkommen kann, sollte man preg_mach_all() mit der Option PREG_SET_ORDER verwenden. 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *

π